Jquery plugins 动态元素未触发实时jQuery事件

Jquery plugins 动态元素未触发实时jQuery事件,jquery-plugins,jquery,Jquery Plugins,Jquery,为什么我绑定的活动的(或死亡的)事件没有一个是动态元素触发的 (function ($) { $.fn.myPlugin = function () { var $filterBox = $("<input type='text'>").live("click", function () { alert("Clicked"); }); this.before($filterBox); // insert into DOM before

为什么我绑定的活动的(或死亡的)事件没有一个是动态元素触发的

(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);
(函数($){
$.fn.myPlugin=函数(){
变量$filterBox=$(“”)。live(“单击”,函数(){
警报(“点击”);
});
this.before($filterBox);//在当前元素之前插入DOM
返回此;//保留链
};
})(jQuery);
我在几个
元素上调用myPlugin。我认为如果在将元素添加到DOM之前绑定Live插件,那么它将在没有Live插件的情况下工作,但即使Live事件也不会触发。是因为我的元素没有ID吗


编辑: 以下操作也不起作用:

var $filterBox = $("<input type='text'>").bind("click", function () {
        alert("Clicked");
});
var$filterBox=$(“”)。绑定(“单击”),函数(){
警报(“点击”);
});

live方法使用选择器,而不是分离的元素。

您可以处理正常(非实时)
单击
事件,它应该可以正常工作。

实时方法使用选择器,而不是分离的元素。
您可以处理正常(非
实时
单击
事件,它应该可以正常工作。

使用选择器(因为它在事件发生时检查目标与选择器),您不能将其直接附加到元素…您应该在这些情况下使用:

(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);

(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);

.

为什么不把它绑起来呢

为什么不把它绑起来

是否仅仅因为
不是有效的HTML?您尚未关闭标签。但是,我不确定jQuery是否无法为您关闭它。

这可能是因为
不是有效的HTML吗?您尚未关闭标签。但是,我不确定jQuery是否无法为您关闭它。

通过不使用相互替换的全局变量,并用
这个迭代问题中的每个元素来解决。每个(…)


通过不使用相互替换的全局变量,并使用
this对每个有问题的元素进行迭代来解决。每个(…)



不知道我为什么不工作。但是,对于所需的选择器,应该只调用live一次。在您的代码中,单击()应该足够了。RE:您的编辑。这应该行得通。事实上,它在我(和Nick)的JSFIDLE中确实有效。那么,你在页面上有什么错误吗?你能打开firebug吗?你调用插件的元素有多少?不知道为什么我不能工作。但是,对于所需的选择器,应该只调用live一次。在您的代码中,单击()应该足够了。RE:您的编辑。这应该行得通。事实上,它在我(和Nick)的JSFIDLE中确实有效。那么,你在页面上有什么错误吗?你能打开firebug吗?你调用插件的元素有多少?@FreshCode-当然可以,在这里测试:我猜你在插件之外还有其他东西在这里搞乱了。是的,我怀疑页面上有其他东西在搞乱我的事件,但我不知道是什么。没有其他影响输入或选择元素的实时事件。@FreshCode-另一个事件处理程序是否返回false,例如?啊哈!我在两个选择器上调用它。减少到一个(:第一个)有效。现在我必须弄清楚为什么它只在一个列表上工作——显然,它有更多的代码。好吧,我的代码单独在一个选择列表上工作,而不是两个。为什么?@FreshCode-当然可以,在这里测试一下:我猜你在插件之外还有其他东西把事情搞砸了。是的,我怀疑页面上有其他东西把我的事件搞砸了,但我不知道是什么。没有其他影响输入或选择元素的实时事件。@FreshCode-另一个事件处理程序是否返回false,例如?啊哈!我在两个选择器上调用它。减少到一个(:第一个)有效。现在我必须弄清楚为什么它只在一个列表上工作——显然,它有更多的代码。好吧,我的代码单独在一个选择列表上工作,而不是两个。为什么?尽管我讨厌在代码中查看无效元素,但jQuery可以毫无问题地修复它。尽管我讨厌在代码中查看无效元素,但jQuery可以毫无问题地修复它。
(function ($) {
    $.fn.myPlugin = function () {
        return this.each(function () {
            // do stuff
        });
    };
})(jQuery);