Как получить нажатие кнопки мыши из командного события в XUL? - PullRequest
0 голосов
/ 16 ноября 2008

Кажется, что XUL команда и click события несколько отличаются.

Хотя моя функция вызывается при использовании события command , объект события не содержит свойства button .

Мой вопрос: как определить, какая кнопка мыши была нажата без использования события click ?

Простейший код, который может продемонстрировать мою проблему:

<?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 Ответ

2 голосов
/ 17 ноября 2008

Главное, что нужно иметь в виду, это то, что oncommand запускается для любого действия, которое приводит к активации кнопки, которая может включать нажатие клавиши пробела, когда кнопка имеет фокус, с помощью сочетания клавиш, прикрепленного к кнопке. или нажав кнопку мышкой. Обработчик события не должен заботиться о том, как он был вызван, только о том, как это было. (Я полагаю, что это было сознательное решение сохранить единый пользовательский интерфейс.)

Единственными действиями, которые приводят к добавлению свойства кнопки к объекту Event, являются onclick, ondblclick, onmousedown и onmouseup. Вы заметите, что даже если вы отключите кнопку onclick, событие все равно сработает, тогда как с oncommand оно не будет.

Чтобы получить ту же функциональность, что и oncommand, вам нужно самостоятельно обработать события onclick и onkeydown, при этом убедившись, что кнопка все еще включена. Вы также можете создать пользовательскую кнопку с помощью XBL, в которой есть пользовательские события, такие как onleftclick или onmiddleclick, которые затем возвращаются к oncommand, если они не установлены, но я не пробовал.

...