Javascript jQuery单击“不适用于动态创建的项”
我有一段jQuery,它循环遍历给定div(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代码不会触发。奇怪的
#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(){...});