За последние 24 часа нас посетили 17556 программистов и 1724 робота. Сейчас ищут 1019 программистов ...

Обработчик события

Тема в разделе "JavaScript и AJAX", создана пользователем ??? Соловьев Е ш326, 5 сен 2014.

  1. Доброго времени суток дорогие форумчане.

    http://cssdeck.com/labs/auemvbce
    Код (PHP):
    1.         document.getElementById('ololo').addEventListener('contextmenu',function(){
    2.             alert('lol');
    3.             return false;
    4.         },false);
    5.  
    6.         document.getElementById('ololo').oncontextmenu=function(){
    7.             alert('lol');
    8.             return false;
    9.         } 
    Такой вопрос: что я делаю в первом варианте обработчика неправильно?
    Первый вариант не работает, а точнее не отменяется действие по умолчанию. Во втором всё ок.
     
  2. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    Пробуйте так:
    Код (PHP):
    1. document.getElementById('ololo').addEventListener('contextmenu', function (e) {
    2.     e.preventDefault();
    3.     alert('lol');
    4. }, false); 
     
  3. Вообще от души. Спасибо =)
    А что за магическое е?
     
  4. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    Никакой магии )) В данном случае: e == event (объект события)
    Кстати, для старых ослов этот метод не доступен. Можно использовать такую универсальную конструкцию:
    Код (PHP):
    1. var preventDefault = function() {
    2.     var e = this.originalEvent;
    3.     if (!e) return;
    4.     // Если preventDefault доступен (для нормальных браузеров и осла 9+)
    5.     if (e.preventDefault) {
    6.         e.preventDefault();
    7.      // Для ослов ниже девятой версии
    8.     } else {
    9.         e.returnValue = false;
    10.     }
    11. } 
    Теперь, можно использовать и для старых ослов. Но не забываем, что IE<9, так же не дружат с addEventListener. У них свой обработчик событий - attachEvent, но это уже совсем другая история...
     
  5. Интересная тема :)
    А если не брать в учет IE, то шаманства ненужны? хватит просто function(e){?
    А то по поводу этого недобраузера у меня смутные сомнения :/
     
  6. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    Значит без шаманства ))
     
  7. Надо будет мне почитать про это. А то вроде учил, а вроде и не помню.

    Спасибо за помощь =)
     
  8. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    Почитайте, не помешает.