好吧,我的问题是,我创建了一个jQuery插件,它将点击和鼠标悬停事件绑定到选择器提供的元素。现在,我需要这些事件,而不是“.live”事件,经过大量的搜索,我找到了'{'解决方案here
其中,给定的解决方案如下..
(function($) {
$.fn.liveBindTest = function() {
return this.each(function() {
$(this).click(function(){
console.log('click');
return false;
});
});
};
})(jQuery);
$('a').live('click', function(){ $(this).liveBindTest(); });
尽管如此,这没有意义,因为插件不会将实时点击绑定到提供的“选择器”。另一方面,它会''将'click事件绑定到选择器元素。 (在这种情况下,锚标签,而不是由开发人员选择器集动态提供)
上面的示例只是采用漫长的路径将实时点击绑定到所有锚元素。其中,适用于您需要为插件实时绑定特定元素的情况。但我的插件完全基于最终开发人员使用插件提供的选择器。因此,这个解决方案意味着每次开发人员都可以,
一个。在实际初始化插件之前,需要手动绑定PLUGIN需要的每个实时事件。有点像..
$('*:not(.complicatedSelectorHere)').live('click', function(){
$(this).liveBindTest();
});
或
B中。他们需要进入jQuery.plugin.js文件,转到代码的底部,然后修改那里的实时事件。这将是一种丑陋的做事方式,而且根本不需要便携,这也是所需要的,便携性。
所以我最后的问题,以确保每个人都清楚..
问题:如何将LIVE
事件绑定到提供给插件的ALL
SELECTORS
?
请不要在下面提供明显的解决方案,因为它不起作用......
(function($) {
$.fn.liveBindTest = function() {
return this.each(function() {
$(this).live('click', function(){
console.log('live clicked');
return false;
});
});
};
})(jQuery);
答案 0 :(得分:6)
每个jQuery对象都有selector
属性,所以只需使用:
$.fn.liveBindTest = function () {
$(this.selector).live('click', function () {
console.log('live clicked');
return false;
});
});
当然,为了使其工作,必须使用某种选择器,即:
// This will work
$('body').liveBindTest();
// This WON'T work
$(document.body).liveBindTest();