这是我的代码:
var myFunction(){
document.addEventListener("deviceready", self.onDeviceReady, false); // scoped event listener
function onDeviceReady() {
// ...
}
}
据我所知,触发事件(deviceready)时,会运行本地(到myFunction)回调。
然而,事件侦听器是全局的,因此一旦事件被触发,也可以调用具有相同全局范围的另一个函数。
如何不仅使回调,而且将侦听器本身作为一个函数进行局部作用(我知道如何为DOM元素做这个但是那个不同)?
答案 0 :(得分:1)
元素本身是全局范围的。只要你附上一些东西,它们就是这样的。请考虑以下::
function myfunc(){
document.getElementById('someId').something = 'test';
}
现在随处可以访问。
我知道你想要得到什么,所以你可以尝试几件事。这是你可以尝试的东西。这将检查元素是否已存在,并且不允许您添加其他事件。
var Marvel = {
on : function(element, action, callback){
Marvel.listeners = Marvel.listeners || {};
Marvel.listeners[action] = Marvel.listeners[action] || [];
for(var index in Marvel.listeners[action]){
if(Marvel.listeners[action][index].element == element){
return console.error("A '"+action+"' event is already established for:", element, Marvel.listeners[action][index]), false
}
}
element.addEventListener(action,callback);
Marvel.listeners[action].push({ element: element, callback: callback });
},
off: function(element, action){
if(!Marvel.listeners || !Marvel.listeners[action])
return console.error("off: No '"+action+"' listener has been created. Listeners: ", Marvel.listeners || 'none'), false;
for(var index in Marvel.listeners[action]){
if(Marvel.listeners[action][index].element == element){
element.removeEventListener(action, Marvel.listeners[action][index].callback);
Marvel.listeners[action].splice(index, 1);
return true
}
}
return console.error("A '"+action+"' event has not yet been established for:", element, Marvel.listeners[action]), false;
}
}

用法:
Marvel.on(document, click, function(e){
console.log(e.target);
});
Marvel.off(document, click);
这会将事件侦听器设置为存储在单独的对象中,并在添加新事件时检查它是否已存在,并且还允许使用off
函数关闭它们。
您可以在Javascript跟踪事件部分的个人资料中找到我网站上的完整说明。
答案 1 :(得分:0)
您的代码应该是这样的:
function myFunction() {
document.addEventListener("deviceready", function () {
//...
}, false); // scoped event listener
}