我目前有一个锚标记,当单击时,会将另一个锚标记附加到DOM。这一切都是通过jQuery完成的。我知道要添加的锚标签的“id”属性是什么。但是,当我尝试以下代码时,它无法处理新添加的锚标记的单击事件:
$(“#id”)。click(function(){ 警报( “测试”); });
答案 0 :(得分:7)
您遇到的问题是,当您拥有代码$('#Element').click(function(){...});
时,如果您使用的是最新版本,它将只会在首次运行该代码时出现的元素上运行代码在jQuery中,您应该使用此代码使其工作:
//This makes sure that all the elements are ready to receive jQuery bindings
$(document).ready(function(){
//The .on function will attach the event to all current
// elements that match the selector and all future elements
// that will match the selector
$(document).on('[EVENT]', '[SELECTOR]', function(){
//Do Stuff
});
});
此代码以及附加到元素的任何其他jQuery代码(使用.on()函数或不使用)都应该使用document.ready如上所述。
这将为现在的任何元素运行事件(在您的情况下,[EVENT]
将为click
),以及将来与[SELECTOR]
匹配的事件(在您的情况下,{{ 1}})
JSFiddle示例:http://jsfiddle.net/DhWmP/
来源:http://api.jquery.com/on/&在需要功能的页面上插入元素的经验。
答案 1 :(得分:3)
在将元素添加到DOM之前,您是否附加了click事件?在这种情况下,它将无法正常工作。您需要在将元素插入DOM之后附加事件,或者添加一个拦截DOM更改的侦听器,并在更新DOM之后添加事件(类似于livequery插件所做的事情)。 p>
答案 2 :(得分:1)
在新DOM节点实际可用之前,您在此处粘贴的代码是否可能正在执行?如果是这样,您可以尝试使用.ready()方法并在事后添加您的点击。
$("#id").ready(function() {
$("#id").click(function() { alert("test"); }
});
编辑:我自己对jQuery有些新意,我认为.ready()方法不仅仅是文档对象可用。如果结果不是这样,看起来有一个jQuery插件,jQuery.Listen,它做了类似的事情:
// Listen to clicks, even for newly added instances of #id.
jQuery.listen( 'click', '#id', function(){ alert("test"); });
如果您可以为动态添加的锚点使用类,那么这样的事情会很好。
// Listen to clicks for anything with the class "dynamicAnchors", even newly
// added anchors.
jQuery.listen( 'click', '.dynamicAnchors', function(){ alert("test"); });
答案 3 :(得分:0)
正如其他人所说,你不能将事件处理程序附加到尚不存在的元素上。因此,如果您的代码段已准备就绪,则无法使用。
只需将$("#id").click(function() { alert("test"); });
放入添加锚点的jQuery代码中。
答案 4 :(得分:0)
如果升级到新的1.3 beta版,则会有一个live()方法来处理委派的事件。如果您无法升级,您可以轻松自行滚动事件委派。 在我的回复中解释here
答案 5 :(得分:0)
使用.on属性在给定标记上附加事件处理程序:
$(document).on("click", "#id" function(){
// Do something...
});