jQuery .on()麻烦

时间:2012-12-09 05:40:43

标签: jquery

好的伙计们,我之前已经非常成功地使用了。然而,这次它没有按预期工作,因为它根本不能识别动态元素!

访问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>

3 个答案:

答案 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(){})