我正在尝试使用 .one()
绑定(bind)到名称类似于 something.else.thing
的事件,我无法更改该事件名称,因为它来自外部库。
问题是由于句点的原因,jQuery 为事件 something
创建命名空间、else
和 thing
,而不是创建名为 something.else.thing
.
有什么办法可以解决这个问题吗?
谢谢
编辑:
一些示例代码:
$(document).on('appfeel.cordova.admob.onAdLoaded', function() {
console.log('Does nothing');
});
document.addEventListener('appfeel.cordova.admob.onAdLoaded', function() {
console.log('Works');
});
最佳答案
我不认为你可以禁用 jQuery 事件命名空间,所以如果你想在带有点的事件上使用 one
,你可以在纯 JS 中执行此操作:
fiddle :http://jsfiddle.net/AtheistP3ace/8z6ewwnv/1/
HTML:
<div id="test"></div>
<button id="mybutton">Run event again</button>
JS:
var test = document.getElementById('test');
var button = document.getElementById('mybutton');
var event = new Event('something.else.blah');
function onWeirdEvent () {
test.removeEventListener('something.else.blah', onWeirdEvent);
alert('did it');
}
test.addEventListener('something.else.blah', onWeirdEvent, false);
test.dispatchEvent(event);
button.addEventListener('click', function (e) {
test.dispatchEvent(event);
}, false);
本质上是一样的。如果您真的希望一切看起来像 jQuery,请创建一个自定义插件:
fiddle :http://jsfiddle.net/AtheistP3ace/8z6ewwnv/2/
$.fn.customOne = function (eventString, fn) {
var self = this[0];
var origFn = fn;
fn = function (event) {
self.removeEventListener(eventString, fn);
return origFn.apply(self);
};
self.addEventListener(eventString, fn, false);
};
$.fn.customTrigger = function (eventString) {
var event = new Event(eventString);
var self = this[0];
self.dispatchEvent(event);
}
$('#test').customOne('something.else.blah', function () {
alert('did it');
});
$('#test').customTrigger('something.else.blah');
$('#test').customTrigger('something.else.blah');
关于javascript - jQuery 事件 : disable namespaces (or use an event with a period in the name),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33901198/