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

时间:2008-11-16 20:17:37

标签: javascript 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>

1 个答案:

答案 0 :(得分:2)

要记住的主要事情是oncommand会触发任何导致按钮激活的操作,包括按钮具有焦点时按空格键,使用附加的键盘快捷键按钮,或用鼠标单击按钮。事件处理程序实际上不应该关心它是如何被调用的,只是它被调用。 (我想这是一个有意识的决定,以保持一致的用户界面。)

导致按钮属性添加到Event对象的唯一操作是onclickondblclickonmousedownonmouseup。您会注意到,即使您停用了onclick按钮,该事件仍然会触发,而oncommand则不会触发。

要获得与oncommand相同的功能,您需要自己处理onclickonkeydown个事件,同时确保按钮仍处于启用状态。您也可以使用XBL创建自定义按钮,其中包含onleftclickonmiddleclick等自定义事件,如果未设置,则可以回退到oncommand - 但我没有试了一下。