我正在编写插件,需要实时绑定点击。当我进行正常的点击绑定时插件工作正常,但不是实时绑定。
我已经将插件简化为基础知识:
(function($) {
$.fn.liveBindTest = function() {
return this.each(function() {
$(this).live('click', function(){
console.log('live click');
return false;
});
$(this).click(function(){
console.log('click');
return false;
});
});
};
})(jQuery);
当我在链接上调用插件函数时,只有click
会打印到我的控制台。
为了live()
工作,我该怎么做?感谢。
答案 0 :(得分:3)
这在插件之外没有解决方法:
(function ($) {
$.fn.liveBindTest = function () {
return this['live']('click', function () {
console.log('click');
return false;
});
};
})(jQuery);
$('a').liveBindTest();
答案 1 :(得分:1)
您有2 click
个事件绑定到单个对象的任何特殊原因?第二个绑定将覆盖live
绑定,因此live
将永远不会被触发。
答案 2 :(得分:1)
在仔细思考之后,我意识到在现有DOM元素上调用live
是没有意义的,因为它已经在DOM中。
Trick是在调用插件时使用live
:
(function($) {
$.fn.liveBindTest = function() {
return this.each(function() {
$(this).click(function(){
console.log('click');
return false;
});
});
};
})(jQuery);
$('a').live('click', function(){ $(this).liveBindTest(); });
答案 3 :(得分:1)
我觉得这很有用(jQuery 1.5.2):
(function($) {
$.fn.clickTest = function () {
return this.each(function() {
$('.clicker').die('click').live('click', function() {
console.log('clicked');
});
$(this).click(function() {
$('body').append('<a href="#" class="clicker">click here '+$(this).attr('id')+'</a><br> ');
});
});
}; }) (jQuery);
答案 4 :(得分:0)
我认为这不是一个好的观点。 现在假设您的插件是一种灯箱,并且它希望将元素锚定在DOM中。 通常在dom准备就绪时你会做类似
的事情$(dom_elements).myplugin();
如果您通过jsor ajax将某些链接添加到您的网页,该怎么办? 我不认为使用你的
重新绑定$('a').live('click', function(){ $(this).liveBindTest(); });
将是正确的方式!它会起作用但说实话我不认为这将是一个“最佳实践”。 真正的问题是,使用jQuery 1.4.2,实时事件委托正在等待一个字符串('a.test')而不是一个对象(这个)。它可能是一个jQuery 1.4.2错误吗?