Ale*_*yne 5 javascript jquery events javascript-events
我想问一个元素是否会响应实时事件,而不会实际触发该事件.
HTML
<div id="foo">Click me!</div>
Run Code Online (Sandbox Code Playgroud)
JS
$('#foo').live('mousedown', function() {
console.log('triggered mousedown event');
}
if ($('#foo').__willRespondToLiveEvent__('mousedown')) {
console.log('#foo is wired up properly');
}
Run Code Online (Sandbox Code Playgroud)
这是一个有点简单和人为的例子,但我正在寻找一个实际适用于__willRespondToLiveEvent__伪代码的替代品.
是否有jQuery在没有实际触发事件的情况下咳出这些信息?
如果您想要一个可以传递选择器的实用程序,您可以这样做:
示例: http ://jsfiddle.net/NMBsG/3/
$('#foo').live('click', function() {
alert('hi');
});
(function($) {
$.hasLive = function(sel, type) {
var data = $.data(document);
if (data && data.events && data.events[type]) {
var evts = data.events[type];
for (var i = 0, len = evts.length; i < len; i++) {
if (evts[i].selector === sel) {
return true;
}
}
}
return false;
};
})(jQuery);
alert($.hasLive('#foo', 'click'));
Run Code Online (Sandbox Code Playgroud)
或者如果你想针对jQuery对象调用它,你可以这样做:
示例: http ://jsfiddle.net/NMBsG/4/
$('#foo').live('click', function() {
alert('hi');
});
(function($) {
$.fn.hasLive = function(type) {
var data = $.data(document);
if (data && data.events && data.events[type]) {
var evts = data.events[type];
for (var i = 0, len = evts.length; i < len; i++) {
if (evts[i].selector === this.selector) {
return true;
}
}
}
return false;
};
})(jQuery);
alert($('#foo').hasLive('click'));
Run Code Online (Sandbox Code Playgroud)
请注意,这两个只检查选择器,因为这是.live()有效的.您可以选择相同的元素,但使用不同的匹配选择器,它将返回false.因此,选择器需要完全匹配.
编辑:
这是一个修改版本,用于.is()针对.live()为所提供事件类型指定的选择器测试jQuery对象.只要对象中的一个元素与.live()该事件的处理程序匹配,它就应该返回true.
示例: http ://jsfiddle.net/NMBsG/5/
var test = $('#foo').live('click', function() {
alert('hi');
});
(function($) {
$.fn.hasLive = function(type) {
var data = $.data(document);
if (data && data.events && data.events[type]) {
var evts = data.events[type];
for (var i = 0, len = evts.length; i < len; i++) {
if ( this.is(evts[i].selector) ) {
return true;
}
}
}
return false;
};
})(jQuery);
alert($('#foo').hasLive('click'));
Run Code Online (Sandbox Code Playgroud)
编辑:修复了没有.live()分配事件时崩溃的问题,感谢@Gaby.
| 归档时间: |
|
| 查看次数: |
690 次 |
| 最近记录: |