我的模板就像这样
{{#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次点击才能使用
这应该有用还是有其他方法可以做到这一点。如果需要更多信息,请告诉我
答案 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) { ...