Событие jQuery click ведет себя по-разному с функцией live в Firefox
Использование события click с функцией live приводит к странному поведению при использовании Firefox *.
С живым в Firefox, щелчок запускается при щелчке правой кнопкой мыши! То же самое не происходит в Internet Explorer 7 ни в Google Chrome.
Пример:
- Без живого, перейдите к демонстрации и попробуйте щелкнуть правой кнопкой мыши
пункты. Диалоговое меню должно
появляются.
- С живым, перейдите к демонстрации и попробуйте прямо
нажав "Click me!". Теперь оба диалога
меню и "Другой абзац".
* проверено с помощью firefox 3.5.3
Ответы
Ответ 1
Насколько я знаю, это известная проблема (ошибка?). Вы можете легко обойти его, проверив, какая кнопка была нажата следующим образом:
$('a.foo').live("click", function(e) {
if (e.button == 0) { // 0 = left, 1 = middle, 2 = right
//left button was clicked
} else {
//other button was clicked (do nothing?)
//return false or e.preventDefault()
}
});
вы можете использовать switch
в зависимости от ваших конкретных требований, но обычно вам просто не нужно ничего делать (или просто возвращать), если нажать любую кнопку, кроме левой кнопки, как указано выше:
$('a.foo').live("click", function(e) {
switch(e.button) {
case 0 : alert('Left button was clicked');break;
default: return false;
}
});
Ответ 2
Я думаю, что это известная "ошибка", вы можете запросить объект события после прикрепления обработчика кликов (который прикрепляется к документу) и посмотреть, есть ли его правый щелчок, иначе вручную присоедините обработчик кликов после того, как вы будете манипулировать DOM.
После поиска, e.button - это свойство, которое вы хотите запросить:
.live('click', function(e){
if ( e.button == 2 ) return false; // exit if right clicking
// normal action
});
Ответ 3
См. мой ответ здесь: если вы не возражаете немного изменить источник jQuery, добавление отдельной строки в liveHandler()
полностью работает вокруг проблемы.