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

时间:2013-10-17 16:18:22

标签: 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}} 

整个模板都附在

之内
 <div id="usersMgmtDiv" class="user-mngt-wrapper clearFix">
 </div>

我想点击

中的锚标签时显示用户信息
  <div class="user-item-right"> 

我为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));
        }
    });
});

但它不会进入这个功能

更新

我尝试使用像

这样的javascript方法调用
  function callUserDetail(){
japp.users.bindEdit();
}

但需要2次点击才能使用

这应该有用还是有其他方法可以做到这一点。如果需要更多信息,请告诉我

1 个答案:

答案 0 :(得分:9)

你的问题就在这里:

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

当您尝试迭代它们时,页面上不会有任何[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.
});

并将填好的模板投放到#container

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

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

$(document).on('click', '[data-control=userBtn]', function(e) { ...

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