3

我的模板是这样的

{{#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"> 

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

   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 次才能完成

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

4

1 回答 1

11

你的问题就在这里:

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

[data-control=userBtn]当您尝试迭代它们时,页面上不会有任何元素。在您将填写好的模板添加到页面之后,这些<a>s 才会存在。此外,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/

如果你没有这样的容器,那么你可以使用 live-ish 形式on

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

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

于 2013-10-17T20:12:06.957 回答