jQuery单击不工作的dynamic创build的项目

我有一个jQuery的循环通过给定的每个元素( #container ),并做一个JavaScript警报每次单击跨度。 如果<span>是静态的,这工作正常。

但是,如果我使用一段代码:

 $(someLink).click(function(){ $("#container").html( <new html with new spans> ) }); 

jQuery代码不会触发。 奇怪的是,虽然

我的问题是:是否有一个原因,我的Click事件不适用于dynamic创build的项目? 我假设我将不得不添加一些东西到我的文档准备好或心跳脚本(这是每100毫秒发射)挂钩事件?

做这个:

  $( '#wrapper' ).on( 'click', 'a', function () { ... }); 

其中#wrapper是一个静态元素,您可以在其中添加dynamic链接。

所以,你有一个硬编码到HTML源代码的包装:

 <div id="wrapper"></div> 

并用dynamic内容填充它。 我们的想法是将事件委托给包装器,而不是直接在dynamic元素上绑定处理器。


顺便说一句,我build议Backbone.js – 它给这个过程的结构:

 var YourThing = Backbone.View.extend({ // the static wrapper (the root for event delegation) el: $( '#wrapper' ), // event bindings are defined here events: { 'click a': 'anchorClicked' }, // your DOM event handlers anchorClicked: function () { // handle click event } }); new YourThing; // initializing your thing 

来源: 这篇文章

如果你dynamic创build你的元素(使用JavaScript),那么这个代码不起作用。 因为.click()会将事件附加到已存在的元素上。 当你使用javascriptdynamic地创build元素时,它不起作用。

为此,你必须使用一些其他的function,在dynamic创build的元素上工作。 这可以用不同的方式完成。

早些时候我们有。 live ()函数

 $('selector').live('click', function() { //your code }); 

但.live()已被弃用。这可以由其他函数替代。

代表 ():

使用delegate ()函数,您可以单击dynamic生成的HTML元素。

例:

 $(document).delegate('selector', 'click', function() { //your code }); 

上():

使用on ()函数,您可以点击dynamic生成的HTML元素。

例:

 $(document).on('click', 'selector', function() { // your code }); 

尝试类似

 $("#container").on('click', 'someLinkSelector', function(){ $("#container").html( <new html with new spans> ) }); 

您基本上需要从DOM的非dynamic部分附加事件,以便可以观察dynamic创build的元素。

 $("#container").delegate("span", "click", function (){ alert(11); }); 

使用.click将只将事件附加到已存在的元素。

你需要使用一个监视dynamic创build事件的函数 – 在老版本的JQuery中这是.live() ,但是这已经被.on()

在1.7.1中使用新的jQuery on函数 –

http://api.jquery.com/on/

前几天我遇到了这个问题 – 我的解决scheme是使用.bind()将所需的function绑定到dynamic创build的链接。

 var catLink = $('<a href="#" id="' + i + '" class="lnkCat">' + category.category + '</a>'); catLink.bind("click", function(){ $.categories.getSubCategories(this); }); getSubCategories : function(obj) { //do something } 

我希望这有帮助。

您必须将click事件添加到存在的元素。 您不能将事件添加到dynamic创build的dom元素。 我想添加事件给他们,你应该使用“.on”将事件绑定到一个已存在的元素。

 $('p').on('click','selector_you_dynamic_created',function(){...}); 

.delegate也应该工作。