Javascript jQuery事件:禁用名称空间(或使用名称中带有句点的事件)
我正在尝试使用Javascript jQuery事件:禁用名称空间(或使用名称中带有句点的事件),javascript,jquery,Javascript,Jquery,我正在尝试使用.one()绑定到名称类似于something.else.thing的事件,我无法更改事件名称,因为它来自外部库 问题在于句点,jQuery为事件something创建名称空间、else和thing,而不是创建名为something.else.thing的事件 这有什么办法吗 谢谢 编辑: 一些示例代码: $(document).on('appfeel.cordova.admob.onAdLoaded', function() { console.log('Does not
.one()
绑定到名称类似于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中执行此操作:
小提琴:
HTML:
本质上是一样的。如果您真的想让一切看起来像jQuery,请创建一个自定义插件:
小提琴:
以下是我决定着手解决这个问题的方式。我这样做是因为这样可以继续使用jQuery及其提供的所有功能,同时保持代码的一致性,并且只需要几行额外的代码
$(document).one('somethingElseThing', function() {
console.log('Event!');
});
document.addEventListener('something.else.thing', function() {
$(document).trigger('somethingElseThing');
});
我所做的是使用纯JavaScript为名称中带有句点的事件创建一个事件侦听器,然后让它触发一个没有句点的自定义事件,以便我可以继续使用jQuery。我认为这是一种简单明了的方法。你有没有尝试过摆脱周期?不确定这是否有效,但值得一试。@JoshCrozier我尝试过用\(
something\.else\.thing
)逃逸,但没什么区别。哪个库有这样一个名为的事件?你能提供一个代码吗?@AtheistP3ace它是一个cordova插件,admob.events.onadload=“appfeel.cordova.admob.onadload”,所以没有区别。我想使用jQuery,这样我就可以使用one()之类的函数了。@marcusds OK,不确定它的值是多少。更新了一些纯JS one支持的问题。您可以继续使用jquery,但可以实现您自己的一个。@marcusds如果您只需要一个jquery插件,您可以轻松创建一个addOnceEventListener
@marcusds更新的答案,向您展示如何构建一个自定义的jquery-one插件来满足您的需要。不要将customOne
作为jquery插件,它不使用任何jquery功能,不需要联轴器,不要屈服:)
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);
$.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');
$(document).one('somethingElseThing', function() {
console.log('Event!');
});
document.addEventListener('something.else.thing', function() {
$(document).trigger('somethingElseThing');
});