实时jQuery事件不会为动态元素触发

时间:2010-12-21 13:35:16

标签: jquery-plugins jquery

为什么我绑定到动态元素触发的实时(或死机)事件都没有?

(function ($) {
    $.fn.myPlugin = function () {

    var $filterBox = $("<input type='text'>").live("click", function () {
        alert("Clicked");
    });
    this.before($filterBox); // insert into DOM before current element
    return this; // keep chain
    };
})(jQuery);

我在几个<select>元素上调用myPlugin。如果我在将元素添加到DOM之前绑定它,我认为它可以在没有Live插件的情况下工作,但即使现场事件也没有触发。是因为我的元素没有ID吗?


修改 以下内容也不起作用:

var $filterBox = $("<input type='text'>").bind("click", function () {
        alert("Clicked");
});

5 个答案:

答案 0 :(得分:2)

.live()使用一个选择器(因为它在事件发生时检查目标与选择器),你不能直接将它附加到一个元素......你应该只使用{{3}在这些情况下:

(function ($) {
    $.fn.myPlugin = function () {

    var $filterBox = $("<input type='text'>").click(function () {
        alert("Clicked");
    });
    this.before($filterBox); // insert into DOM before current element
    return this; // keep chain
    };
})(jQuery);

.click(),或You can try it out here更短一点:

(function ($) {
  $.fn.myPlugin = function () {    
    $("<input type='text'>").click(function () {
        alert("Clicked");
    }).insertBefore(this);
    return this;
  };
})(jQuery);

.insertBefore()

答案 1 :(得分:1)

live方法适用于选择器,而非分离元素 您可以处理正常(非liveclick事件,它应该可以正常工作。

答案 2 :(得分:0)

为什么不绑定它? http://jsfiddle.net/9WvpA/

答案 3 :(得分:0)

可能只是因为"<input type='text'>"不是有效的HTML吗?您尚未关闭代码。但是,我不确定jQuery是否无法为您关闭它。

答案 4 :(得分:0)

解决方法是不使用相互替换的全局变量,并使用this.each(...)迭代相关的每个元素:

(function ($) {
    $.fn.myPlugin = function () {
        return this.each(function () {
            // do stuff
        });
    };
})(jQuery);