在 Javascript 中,普遍的理解是您不应该修改不属于您的对象。我理解并同意这些论点。尽管如此,我正在考虑向 Event 对象添加几个属性。首先,我将写一些背景知识以及其影响,然后我希望从您那里得到一些明智的反馈,包括正反两方面。
我已经编写了一个事件管理器,它具有 addEvent、removeEvent 等方法。当事件被触发时,我将调用处理程序,将事件对象传递给事件监听器已注册时传入的事件处理程序。
在传递事件对象之前,我将向事件对象添加几个属性。例如; “hotKey”——可能的值如“shift-c”、“alt-d”或“meta-a”。 (最后一个对应于 Window 上的“ctrl-a”和 MacOS 等上的“cmd+a”。换句话说,根据操作系统,它将正确匹配并且处理程序逻辑模式不需要关心它是否打开哪个操作系统或它是什么元 key )
这意味着处理程序代码变得更小,这要归功于事件管理器已执行所有需要的“if-then”语句,例如当与键相关的事件已被触发时。事件处理程序非常需要有一个 switch 语句并做一些有趣的事情。
除了热键属性外,我还计划添加一些其他属性,主要是为了简化事件处理函数,从而消除事件处理程序通常执行的逻辑。为了避免命名冲突,我可能会在子对象中添加新属性。换句话说,属性不需要是顶级属性。
我目前正在实现这个,但我希望获得我可能没有想到的见解。
添加
问题是其他人如何看待下面的实现。这需要修改传递给处理程序的事件对象。我问这个问题是因为我实际上是在修改一个我不拥有的对象......但在这种情况下这样做有好处。
addEvent( document, "keyup", function(event) {
switch (event.hotKey) {
case 'meta-c':
// code here
break;
case 'meta-a':
// code here
break;
}
});
最佳答案
嗨哈坎你也在这里:)
尝试创建您自己的 event object然后使用 trigger() 发送它功能。
例子
//Create a new jQuery.Event object without the "new" operator.
var e = jQuery.Event( "click" );
// trigger an artificial click event
jQuery( "body" ).trigger( e );
触发器
$( "#foo" ).on( "click", function() {
alert( $( this ).text() );
});
$( "#foo" ).trigger( "click" );
所有示例都在这些链接上。
关于javascript - 在 Javascript 中修改事件对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8952506/