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');
});