Javascript — Onmiddleclick на div

#javascript #onclick

#javascript #onclick

Вопрос:

мне нужно решение, отличное от Jquery middleclick, для всех новых браузеров. Моя идея заключалась в том, чтобы использовать onmiddleclick … но этот код не работает.

Надеюсь, кто-нибудь сможет помочь.

HTML / JS код

 <div id="test" onmiddleclick="alert('middle');" ondblclick="alert('dbl');" > 
 CLICK HERE 
</div>
  

Пример
http://jsfiddle.net/392BK /

Заранее спасибо!
Питер

Ответ №1:

Javascript:

 <script type="text/javascript">
    function whichButton(e) {
        if (!e) var e = window.event;
        switch (e.which) {
            case 1: alert("Left"); break;
            case 2: alert("Middle"); break;
            case 3: alert("Right"); break;
        }
    }
</script>
  

HTML:

 <div id="test" onmouseup="whichButton()">Click Me</div>
  

Прочтите эту страницу QuirksMode для получения дополнительной информации о свойствах события.

Если возможно, определенно стоит использовать jQuery для подобных вещей. Кроссбраузерная совместимость для щелчков мышью оставляет желать лучшего, и вам понадобится что-то более похожее на эту демонстрацию, чтобы обеспечить поддержку во всех браузерах.

Комментарии:

1. @Питер: Да, это действительно немного кошмарно. Браузеры обрабатывают which и button по-разному, поэтому вам нужно будет использовать их в коде (см. страницу QuirksMode ). Есть ли причина, по которой вы не можете использовать jQuery? Как бы я ни ругал ответ @netbrain, jQuery действительно вступает в свои права при работе с такими межбраузерными несоответствиями, как это.

2. @Peter: Без jQuery вы будете смотреть на что-то немного более запутанное, вроде этого: jsfiddle .

Ответ №2:

Обновлен код из «Town», он исправит ошибку в Firefox и, возможно, других браузерах с сообщением «e не определено».

В HTML вы должны отправлять параметр события следующим образом:

<div id="test" onmouseup="whichButton(event)">Click Me</div>

Надеюсь, это поможет вам!

Комментарии:

1. Это не будет работать в IE, поскольку IE использует event.button вместо event.which . Смотрите ссылку в моем ответе.

Ответ №3:

Использование onclick и обнаружение щелчков было бы хорошей альтернативой.

Проверьте это

Ответ №4:

Используйте onmousedown событие. Объект event имеет button свойство, которое содержит битовую маску для нажатых кнопок. Значение 4 означает, что нажата только средняя кнопка.

Комментарии:

1. Только в IE . В противном случае это 1 для среднего щелчка.

Ответ №5:

Вот так!

http://jsfiddle.net/392BK/1/

 $().ready(function(){
    $("#test").mousedown(function(b){
      if(b.which==1)alert('Left Mouse Button Clicked');
      else if(b.which==2)alert('Middle Mouse Button Clicked');
      else if(b.which==3)alert('Right Mouse Button Clicked');
    });
})
  

Редактировать:

Мой плохой, но типы событий все еще применяются.

Комментарии:

1. Чтобы не слишком усугублять актуальность, но $().ready() это не рекомендуется в соответствии с документацией , хотя и не указано конкретно, почему! Если вам нужно сокращение, я бы использовал $(handler) .