如何从XUL中的命令事件中获取鼠标按钮?

问题描述:

看来,XUL 命令点击事件有所不同。如何从XUL中的命令事件中获取鼠标按钮?

虽然使用命令事件时,我的功能不会被调用,事件对象不包含按钮财产。

我的问题是:我该如何检测没有使用点击事件而按下的鼠标按钮?

,可以证明我的问题,最简单的代码:

<?xml version="1.0"?> 
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?> 

<window id="yourwindow" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> 
<script language="JavaScript"> 
    var showMeTheButton=function(e) 
    { 
     alert(e.button); 
    } 
</script> 
<button onclick="showMeTheButton(event)" label="Click me with onclick"></button> 
<button oncommand="showMeTheButton(event)" label="Click me with oncommand"></button> 
</window> 

主要的事情要记住的是,oncommand为导致该按钮的激活任何行动可以包括按空格发射扎当按钮具有焦点,使用附接至按钮键盘快捷键,或者用鼠标单击的按钮。事件处理程序实际上不应该关心它是如何被调用的,而只是它是。 (我想这是一个非常明智的决定,以保持一致的用户界面。)

导致按钮属性添加到事件对象的唯一行动是onclickondblclickonmousedownonmouseup。你会注意到,即使您停用onclick按钮,该事件仍是起火而与oncommand不会。

要获得与oncommand相同的功能,您需要自己处理onclickonkeydown事件,同时确保该按钮仍处于启用状态。您可能还可以创建使用XBL其中有像onleftclickonmiddleclick自定义事件,然后回落到oncommand如果没有设置他们的自定义按钮 - 但我没有尝试过。