处理由jQuery插入的HTML元素的事件

时间:2009-01-01 12:31:52

标签: jquery

我目前有一个锚标记,当单击时,会将另一个锚标记附加到DOM。这一切都是通过jQuery完成的。我知道要添加的锚标签的“id”属性是什么。但是,当我尝试以下代码时,它无法处理新添加的锚标记的单击事件:

$(“#id”)。click(function(){     警报( “测试”); });

6 个答案:

答案 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...
});