点击事件在车把模板内不起作用

use*_*884 2 jquery templates handlebars.js

我的模板是这样的

{{#users}}
 <div id="userRoleInfo">
        <input type="hidden" id="userId" value="{{id}}" />
        <div class="label">
            <label>User permission</label>
        </div>

     <div class="user-item-right">
// I want to capture click event of this anchor tag
            <a href="#" class="updown-arrow" onClick="callUserDetail()" data-control="userBtn"><i class="icon-arrow-big"></i></a>
          </div>    

        {{#checkUser ../user.roleId roleId ../roles}}
            <div >Administrator</div>
        {{else}} 
            <select id="selRoleId" data-custom="true">                                                   
                    <option value="0" >Assign Role</option>

                {{#each roles}}
                    <option value="{{roleId}}">{{name}}</option>
                {{/each}}

            </select> 
        {{/checkUser}}

   </div>

 {{/users}} 
Run Code Online (Sandbox Code Playgroud)

整个模板都附在里面

 <div id="usersMgmtDiv" class="user-mngt-wrapper clearFix">
 </div>
Run Code Online (Sandbox Code Playgroud)

当我点击里面的锚标签时,我想显示用户信息

  <div class="user-item-right"> 
Run Code Online (Sandbox Code Playgroud)

我为click事件编写的函数是这样的

   japp.users.bindEdit = function () {

 if (jQuery('[data-control=userBtn]').size() === 0) {
    return;
 }

var self = japp;

jQuery('[data-control=userBtn]').each(function() {
    jQuery(this).live('click', function (e) {
        e.preventDefault();
        e.stopPropagation();
        if(jQuery(this).is('.active')){
            self.users.hideUserBox(jQuery(this));
        } else {
            self.users.showUserBox(jQuery(this));
        }
    });
});
Run Code Online (Sandbox Code Playgroud)

但它不会进入这个功能

更新

我试着用javascript方法调用

  function callUserDetail(){
japp.users.bindEdit();
}
Run Code Online (Sandbox Code Playgroud)

但这需要2次点击才能实现

这是应该工作还是有其他方法来做到这一点.如果需要更多信息,请告诉我

mu *_*ort 9

你的问题就在这里:

jQuery('[data-control=userBtn]').each(function() {
    jQuery(this).live('click', function (e) { /* ... */ });
});
Run Code Online (Sandbox Code Playgroud)

[data-control=userBtn]当您尝试迭代它们时,页面上将不会有任何元素.<a>在您将填好的模板添加到页面之后,这些将不存在.此外,live在jQuery 1.7中被弃用并在1.9中删除,所以你不应该再使用它,你应该使用它on.

理想情况下,您有一个已知容器,您可以将模板放入其中.然后你会说:

$('#container').on('click', '[data-control=userBtn]', function(e) {
    // Deal with the click in here.
});
Run Code Online (Sandbox Code Playgroud)

并将填好的模板放入#container.

演示:http://jsfiddle.net/ambiguous/PhtP3/

如果你没有这样的容器,那么你可以使用以下的实时形式on:

$(document).on('click', '[data-control=userBtn]', function(e) { ...
Run Code Online (Sandbox Code Playgroud)

演示:http://jsfiddle.net/ambiguous/ZaLnq/