为什么我绑定到动态元素触发的实时(或死机)事件都没有?
(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");
});
答案 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);
答案 1 :(得分:1)
live
方法适用于选择器,而非分离元素
您可以处理正常(非live
)click
事件,它应该可以正常工作。
答案 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);