jQuery – 无法将事件绑定到动态元素?

我来维护一段从服务器下载一些JSON数据的javascript,构建一个新的表行(如$('

</tr') )并将其插入到文档中。

a节点在某一点上创建如下:

 var a = $(''); 

然后,事件就像这样绑定到它:

 a.click(function () { // yadda yadda return false; }); 

唯一的问题是这似乎不起作用。 也没有通过on()或不推荐的live()绑定。 处理程序只是“被忽略”,从不触发,页面滚动到顶部(由于href="#" )。 绑定事件时,该元素已经append到DOM。 任何帮助将不胜感激。

想到的一些上下文信息:元素是在迭代数据的循环内创建的,但这不应该是一个问题,除非javascript有一些非常奇怪的东西继续使用作用域,加上我尝试使用该元素的所有其他工作:我可以更改其内容,样式,只有事件绑定不起作用。 当然,jQuery版本是1.8.3

EDITED

应该像这样设置.on()以使用动态创建的元素。 另外,请确保使用Jquery 1.8版(最新版本)

此外,如果您不想滚动到顶部,则需要阻止单击的标准操作。

这是一个有效的FIDDLE

 var a = $('ASD'); a.appendTo($("body")); $('body').on('click', 'a', function(e) { e.preventDefault(); $(this).after('
ASD'); });
 You have various options. You can bind to the element or to the document. 

与文件有关:

  $(document).on("click", "a.foo", function(event){ //do stuff here }); 

当您绑定到文档时,您可以自由地创建和销毁a.foo元素,它们都将响应您的function。

与元素的结合:

 $("a.foo").on("click", function(event){ //do stuff here }); 

绑定到元素时,该函数仅绑定到所有以前存在的元素。 因此,请确保在文档加载结束时或function结束时执行此操作。

我建议永远绑定到文档!

我想到了两件事:

  1. 该链接没有文字,因此您不会点击它。
  2. 你甚至没有将它附加到dom。

这里有一个小提琴,可以使用与你的代码非常相似的代码。

 var a = $('ASD'); a.click(function() { alert('a'); }); a.appendTo($("body")); 

你可以像这样使用事件委托。

 $('body').on('click','.foo',function(){ alert('foo'); }); 

这将允许您在元素存在之前设置事件处理程序。

试试这个:

 var a = $('ASD'); $("body").html(a); a.click(function() { alert('a'); return false; }); 

尝试在动态创建元素的函数范围内绑定函数。

 $('a.foo').on('click',function(event){ //your code goes here });