【问题标题】:mootools - Middle clickmootools - 中键
【发布时间】:2013-08-29 09:47:36
【问题描述】:

如何检测 mootools 1.4.5 中是否有中键?

我知道这可以在常规 JS 中完成,但我无法让它在 mootools 中工作。

$('someLink').addEvent('click', function(e){
     if(e.button == 1){ // <-- .button doesn't exist in mootools. .which doesn't either
          e.stop();
          // Does some things
     }          
});

【问题讨论】:

  • 如果你在你的函数中传递了obj,你可以通过event.which得到它。无法解释为什么,我很想听听一些专家解释/回答这个问题。也许 Dimitar 或其他人很快就会检查这个......无论如何:检查这里,然后查看控制台。 (jsfiddle.net/RDc2Z)
  • 该示例中似乎有错误; event 甚至没有定义。修复错误后,.which.button 仍然未定义。编辑:啊,它适用于 Chrome,但不适用于 FF。
  • 示例中没有错误,你检查控制台了吗?你可以用 alert() 代替jsfiddle.net/RDc2Z/1 来检查这个
  • 通过。两件事情。我的 mac book 上没有中间按钮。二。如果您需要依靠中键来设计 UI,那么您可能做错了。如果必须,请使用 ctrl/meta/cmd 单击。如果我明天有空闲时间,我会看看 Event.js 代码,看看它是否可以在 mootools 1.5 出来之前标准化。
  • Sergio 的解决方案仅适用于 Chrome。我做了一些更改,现在它可以在 FF、Chrome 和 IE 中使用。不完全确定为什么会这样。 .addEvent 不应该与.addEventListener 相同吗? (jsfiddle.net/RDc2Z/2/)

标签: mootools


【解决方案1】:

MooTools 使用 addEventListenerattachEvent 取决于浏览器:

  • addEventListener 用于所有现代浏览器和 IE9+
  • attachEvent 用于旧 IE

但 MooTools 将事件数据包装到自定义规范化对象中,该对象对于所有浏览器具有相同的结构和值。不幸的是,它不处理 button 属性,但可以获取它的值。

您可以从 MooTools 事件对象的 event 属性中获取原始事件数据,但该数据可能因浏览器而异。 F.e. e.button 属性未“规范化”,在旧 IE 中其值可能与其他浏览器不同。

因此,您使用 addEvent 的代码将如下所示:

$('someLink').addEvent('mousedown', function(e){
    alert(e.event.button);       
});

(注意:我正在使用mousedown 事件,因为当前版本的 Firefox 浏览器不会为中间按钮触发 click 事件)

在这里工作:http://jsfiddle.net/hjsAj/

【讨论】:

  • 绝妙的答案!这个解决方案最好的部分是可以使用 mootools 事件委托。谢谢!
猜你喜欢
  • 1970-01-01
  • 2012-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-02
  • 1970-01-01
相关资源
最近更新 更多