好的伙计们,我之前已经非常成功地使用了。然而,这次它没有按预期工作,因为它根本不能识别动态元素!
访问http://www.MetalGains.com查看问题。单击“查看演示”,然后使用演示凭据登录。如果您单击“铅笔”,您将看到编辑功能正常工作。但是,如果您添加资产,然后单击添加的铅笔,您将看到它不起作用。
在某些时候,这行代码是动态添加的:
<div class='edit-item'><a name='"+$id+"' href='#add-asset-"+status+"' class='edit'></a></div>
我想调用的javascript如下。请注意,它适用于页面加载,而不是任何动态的。我错过了什么?
$(".edit-item .edit").on('click', function(){
return false;
}).each(function(){
$(this).fancybox({
afterClose: function(){
//we have to remove this class so that if someone tries to add a new asset it will use the
//add script and not the update script
$(".asset-form").removeClass("update");
//We need to set the values back to empty so that they aren't prepopulated when someone
//tries to add an asset later.
$(".asset-form :input[name='type']").val("");
$(".asset-form :input[name='year']").val("");
$(".asset-form :input[name='quantity']").val("");
$(".asset-form :input[name='ounces']").val("");
$(".asset-form :input[name='paid']").val("");
$(".asset-form :input[name='date']").val("");
$(".asset-form :input[name='notes']").val("");
//we remove the hidden field that passes the asset id.
$(".asset-form :input[name='editId']").remove();
}//end afterClose
}); //end edit fancybox
}); //end each
顺便说一句,这很有效:
$(".note-img").on('click', function(){
return false;
}).each(function(){
$(this).fancybox();
});
关于这个动态添加的内容:
<a href='#note-"+$id+"' class='note-img'></a><div class='note' id='note-"+$id+"'>"+$notes+"</div>
答案 0 :(得分:4)
使用on
进行事件委派的正确方法是:
$(document).on('click', '.edit-item .edit', function(){
或者:
$('#staticParent').on('click', '.edit-item .edit', function(){
如果edit-item
是静态的:
$('.edit-item').on('click', '.edit', function(){
实际上on
与旧的live
方法不同,live
从文档对象委托事件,但使用on
方法时,您应指定哪个静态父级元素或文档对象应该用于事件委托。
答案 1 :(得分:0)
我之前通过向结尾添加选择器上下文来解决这个问题......
$(".edit").on('click', '.edit-item', function(){ ... })};
答案 2 :(得分:0)
请参阅以下代码。
$('.edit-item').on('click', '.edit', function(){})