Javascript jQuery单击“不适用于动态创建的项”

Javascript jQuery单击“不适用于动态创建的项”,javascript,jquery,html,Javascript,Jquery,Html,我有一段jQuery,它循环遍历给定div(#container)中的每个元素,并在每次单击span时发出javascript警报。如果是静态的,则此功能可以正常工作 但是,如果我使用以下代码: $(someLink).click(function(){ $("#container").html( <new html with new spans> ) }); $(someLink)。单击(函数(){ $(“#容器”).html() }); jQuery代码不会触发。奇怪的

我有一段jQuery,它循环遍历给定div(
#container
)中的每个元素,并在每次单击span时发出javascript警报。如果
是静态的,则此功能可以正常工作

但是,如果我使用以下代码:

$(someLink).click(function(){
   $("#container").html( <new html with new spans> )
});
$(someLink)。单击(函数(){
$(“#容器”).html()
});
jQuery代码不会触发。奇怪的是


我的问题是:我的点击事件对动态创建的项目不起作用有什么原因吗?我假设我必须在我的document ready或heartbeat脚本(每100毫秒触发一次)中添加一些内容来连接事件???

使用1.7.1中的新jQuery on函数-


使用
。单击
将仅将事件附加到已存在的元素

您需要使用一个监视动态创建的事件的函数—在较旧版本的JQuery中,这是
.live()
,但它已被取代。请执行以下操作:

 $( '#wrapper' ).on( 'click', 'a', function () { ... });
其中,
#wrapper
是一个静态元素,您可以在其中添加动态链接

因此,您有一个硬编码到HTML源代码中的包装器:

<div id="wrapper"></div>
试试像这样的东西

$("#container").on('click', 'someLinkSelector', function(){ $("#container").html( <new html with new spans> ) });
$(“#容器”).on('click','someLinkSelector',function(){$(“#容器”).html();
基本上,您需要从DOM的非动态部分附加事件,以便它可以监视动态创建的元素。

来源:

如果动态创建元素(使用javascript),则此代码不起作用。 因为,.click()会将事件附加到已存在的元素。当您使用javascript动态创建元素时,它不起作用

为此,您必须使用一些在动态创建的元素上工作的其他函数。这可以通过不同的方式实现

之前我们有。直播功能

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

代表():

使用委派功能,您可以单击动态生成的HTML元素

例如:

$(document).delegate('selector', 'click', function()
{
 //your code
});
$(document).on('click', 'selector', function()
{
// your code
});
EDIT:delegate()方法在3.0版中被弃用。改用on()方法。

ON():

使用on()函数,您可以单击动态生成的HTML元素

例如:

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

几天前我遇到了这个问题-我的解决方案是使用.bind()将所需函数绑定到动态创建的链接

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

getSubCategories : function(obj) {
 //do something
}
var-catLink=$('');
绑定(“单击”,函数(){
$.categories.getSubCategories(此);
});
getSubCategories:函数(obj){
//做点什么
}

我希望这会有所帮助。

您必须将单击事件添加到现有元素中。 不能向动态创建的dom元素添加事件。 若要向它们添加事件,应使用“.on”将事件绑定到现有元素


.delegate也应该工作。

为什么.on而不是.live或.delegate?@yes123很好,因为
.live
.delegate
已被
.on
取代。
.on
方法提供了绑定事件的所有功能,不再需要其他方法。再一次,这是一个我不知道的功能!谢谢我还将为我的下一个项目研究backbone.js!是的,我的意思是,为什么他们不赞成。活着。为什么,穿上更好?也许是因为。在统一。生活和生活。delegate@yes123是的,这就是原因
.on
统一了
.bind
.live
.delegate
。统一可以实现更简单、更简洁的代码。我想知道
on()
delegate()
之间的区别是什么吗?它过去是正确的方法,现在不知道它是否有任何不同(现在有一段时间没有使用jQuery)。这是解释真正问题的一个很好的答案。其他答案给出了解决方案,但这也解释了它为什么有效。干得好@rocLv!我的问题是,我正在向dom元素添加元素,但由于某些原因,它们没有与事件绑定。我想知道我是否可以在创建元素时设置点击事件。到底什么是
selector\u you\u dynamic\u created
它是类还是id?
var catLink = $('<a href="#" id="' + i + '" class="lnkCat">' + category.category + '</a>');
catLink.bind("click", function(){
 $.categories.getSubCategories(this);
});

getSubCategories : function(obj) {
 //do something
}
$('p').on('click','selector_you_dynamic_created',function(){...});