Похоже, что события 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>



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Главное помнить, что oncommand запускается для любого действия, которое приводит к активации кнопки, что может включать нажатие клавиши пробела, когда кнопка находится в фокусе, использование сочетания клавиш, прикрепленного к кнопке, или нажатие кнопки. с помощью мыши. На самом деле обработчик событий не должен заботиться о том, как он был вызван, а только о том, что это было. (Я полагаю, что это было сознательное решение сохранить последовательный пользовательский интерфейс.)
Единственные действия, которые приводят к добавлению свойства кнопки к объекту события, - это onclick, ondblclick, onmousedown и onmouseup. Вы заметите, что даже если вы отключите кнопку onclick, событие все равно сработает, тогда как с oncommand этого не произойдет.
Чтобы получить ту же функциональность, что и oncommand, вам нужно будет самостоятельно обрабатывать события onclick и onkeydown, убедившись, что кнопка все еще активна. Вы также можете создать настраиваемую кнопку с помощью XBL, которая имеет настраиваемые события, такие как onleftclick или onmiddleclick, которые затем возвращаются к oncommand, если они не установлены, - но я не пробовал.