0

我有这个问题:
我通过 jquery 插入某些 html。在那个插入的html中,我有一个绑定了函数的类。这个函数没有被调用,我有感觉,插入的html还没有被js看到。

我的插入代码。

$(function(){
  $('#einf').on('click', function(){
    $('<tr><td><a class="ame">delete</a></td></td></tr>').insertAfter('#append_tr');
  });
});

您可以假设,插入效果很好。这是我的绑定函数:

$(function(){
  $('.ame').on('click', function(){
     alert('test');
  }); 
});

我用同一个类已经存在的元素进行了测试ame,它正在使用它。感谢您的帮助和指导

4

4 回答 4

3

您必须在添加的元素上再次运行单击绑定。也许这样的事情会起作用:

$('<tr><td><a class="ame">delete</a></td></td></tr>').insertAfter('#append_tr').find('.ame').on('click', function(){
    alert('test');
});
于 2013-02-11T08:20:22.233 回答
1

尝试使用事件委托:http: //jsfiddle.net/xehu9/

$('#einf').on('click', '.ame', function(e){ //<-----pass it here.
    e.stopPropagation(); //<---------stop the event bubbling here.
    alert('test');
});

发生这种情况是因为您试图在页面准备好时实现对 dom 中不存在的元素的点击。

来自文档:

事件处理程序仅绑定到当前选定的元素;当您的代码调用 .on() 时,它们必须存在于页面上。

于 2013-02-11T08:20:28.210 回答
1

试试.live().on()

http://jsfiddle.net/ThobiasN/Pt3db/

  $(function(){ 
    $('#einf').on('click', function(){ alert ('some');
      $('<tr><td><a class="ame">delete</a></td></td></tr>').insertAfter('#append_tr');
    });
    $('.ame').live('click', function(){
       alert('test');
    }); 
  });
于 2013-02-11T08:35:46.763 回答
0

You cannot reference an element that was dinamically created, because it's not in the DOM when javascript runs, I suggest you use TEMPLATES instead of dinamic html content.

However, if you want to follow this approach, jquery allows concadinating element methods:

$(function(){
$('#einf').on('click', function(){
$('<tr><td><a class="ame">delete</a></td></td></tr>')
.insertAfter('#append_tr')
.on('click',function(){
 alert('test');
});
});
});
于 2013-02-11T08:23:00.043 回答