为什么使用MooTools定义伪事件时Firefox中的事件是未定义的?
Why is event in Firefox undefined when defining a pseudo event with MooTools?
我试图用MooTools定义一个伪事件。它可以在Chromium中工作,但在Firefox中不行。这两款浏览器都是最新的稳定版本。这是我的事件:
DOMEvent.definePseudo('ctrl', function(split, fn, args){
if(event.ctrlKey == true) fn.apply(this, args); // this is where Firefox says undefined
});
如果在单击元素时按下crtl键,则应该触发。我是这样添加事件的:
this.element.addEvent('click:ctrl', function(event) {
event.stop();
data = this.retrieve('imageData');
this.toggleClass('selected');
if(this.hasClass('selected')) {
gallery.collection[data.id] = data;
} else {
Object.erase(gallery.collection, data.id);
}
});
有什么提示或想法为什么这个错误发生?我的想法是,我不通过event
,但我不知道如何做到这一点,因为我的代码是在铬和其他浏览器工作。
如果您检查DOMEvent.definePseudo
函数中的参数,您将看到没有event
对象,而是args
数组,其中事件对象是该数组的第一个元素。所以不是:
应:if (event。ctrlKey == true) fn。应用(这个,args);
事件对象通常作为第一个参数传递给事件处理程序,而definePseudo实际上是事件处理程序的处理程序,您应该在其中决定事件处理程序将发生什么。你的代码在Chrome(也支持IE, Safari和Opera)上工作的原因是因为他们总是提供一个全局事件变量,但在Firefox中,你需要将事件对象作为参数传递给事件处理程序。如果(args[0]。Control == true)应用(这个,args);
添加额外的自定义事件,如control+click,也可以很容易地实现Element.Events:
Element.Events.controlclick = {
base: 'click', // the base event type
condition: function(event){ //a function to perform additional checks
return (event.control == true); // this means the event is free to fire
}
};
$('test').addEvent('controlclick', function(event){
console.log( 'the user clicked the left mouse button while holding the control key');
});
相关文章:
- $window.ga在AngularJS事件中未定义
- 事件在加载之前时的未定义位置
- Razor Dropdown onchange事件未触发始终未定义
- ui.columnIndex在igGridHiding-columnShowing事件中未定义
- ReferenceError:事件未在Firefox中定义错误
- 包含的javascript源代码通过PHP,onmousemove事件,函数未定义
- InAppBrowser事件.url始终未定义
- 自定义jQuery插件:事件未按预期运行
- 事件未定义 火狐.
- 事件未定义错误在 javascript 中只有 Firefox
- 事件未定义错误,仅在火狐中
- 事件未定义 JavaScript Firefox (JSON)
- JS Revearing Pattern事件未定义问题
- 事件未定义 FF
- ReferenceError:事件未定义firefox d3.js
- 为什么使用a.c click时事件未定义?
- "事件未定义“;在firefox中
- 类型错误:firefox中关于javascript的事件未定义
- jQuery onkeyup事件:未定义扫描
- IE8中的图像加载事件;事件未定义,这是“窗口”对象