似乎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>
答案 0 :(得分:2)
要记住的主要事情是oncommand
会触发任何导致按钮激活的操作,包括按钮具有焦点时按空格键,使用附加的键盘快捷键按钮,或用鼠标单击按钮。事件处理程序实际上不应该关心它是如何被调用的,只是它被调用。 (我想这是一个有意识的决定,以保持一致的用户界面。)
导致按钮属性添加到Event对象的唯一操作是onclick
,ondblclick
,onmousedown
和onmouseup
。您会注意到,即使您停用了onclick
按钮,该事件仍然会触发,而oncommand
则不会触发。
要获得与oncommand
相同的功能,您需要自己处理onclick
和onkeydown
个事件,同时确保按钮仍处于启用状态。您也可以使用XBL创建自定义按钮,其中包含onleftclick
或onmiddleclick
等自定义事件,如果未设置,则可以回退到oncommand
- 但我没有试了一下。