IMO (и quirksmode's ), битовая маскировка IE лучше, чем версия W3C, потому что вы можете обнаружить комбо-клики, такие как левый + правый или средний + левый. Это предлагает немного больше гибкости. Оба (общее количество нажатых кнопок и самая новая нажатая кнопка) будет еще лучше.
Я не знаю библиотеки или скрипта, которые уже делают то, что вы пытаетесь сделать, я думаю, что большинство разработчиков просто проигнорируют комбо-клики, если они не захотят применить определенное действие к комбо-клику. Кроме того, это довольно сложно, вам придется обнаружить как onmousedown
, так и onmouseup
для всего документа и записать состояние кнопок мыши. Затем на элементе, над которым вы хотите применить свою магию, вычтите предыдущее состояние мыши из нового. Что-то вроде (проверено):
if (document.attachEvent)
{
(function ()
{
var mState = 0;
document.documentElement.attachEvent("onmousedown", function ()
{
mState += event.button;
});
document.documentElement.attachEvent("onmouseup", function ()
{
mState -= event.button;
});
document.getElementById("jim").attachEvent("onmousedown", function ()
{
var realButton = event.button - mState;
alert(realButton);
// Your code here
});
})();
}
Конечно, есть только около миллиона вещей, которые могут пойти не так с этим сценарием. Например, в моем примере у меня есть окно предупреждения, которое всплывает с реальным состоянием кнопки. Если вы отпустите кнопку, когда диалоговое окно с предупреждением установлено, документ не обнаружит наведений мыши и выкинет все из строя. Аналогично, любые события mouseup или mousedown на других элементах, которые останавливают распространение вплоть до обработчика события documentElement , могут привести к его разрыву.
Если вам нужен мой совет, выведите сообщение о комбо-щелчке мыши, угадайте «правильную» кнопку мыши или игнорируйте их все вместе. Любой из этих вариантов лучше, чем хакерский подход.