Возвращение false из обработчика кликов не работает в Firefox - PullRequest
10 голосов
/ 24 марта 2011

В приведенном ниже примере return false, по-видимому, не предотвращает действие по умолчанию после щелчка по ссылке (поскольку страница прокручивается вверх) в Firefox 3.6 или Chrome 10, но работает в Internet Explorer.

Использование event.preventDefault() делает то, что мне нужно, но мне интересно, почему return false не работает с другими.

Примечание: Мне не нужнодля поддержки Internet Explorer.

<script>
  addEventListener("DOMContentLoaded", function(){
    document.getElementById("link").addEventListener("click", function(){
      alert("Clicked!");
      return false;
    }, false);
    alert("Click handler bound!");
  }, false);
</script>

<div style="margin-top: 1200px;">
  <a id="link" href="#">Click me!</a>
</div>

Ответы [ 3 ]

28 голосов
/ 24 марта 2011

return false работает в разных браузерах, но только для обработчиков событий, которым назначен путь "DOM0", например

document.getElementById("link").onclick = function() {
    alert("Clicked!");
    return false;
};

Для обработчиков событий, которым назначен путь DOM Level 2 через addEventListener(), необходимо использовать preventDefault():

document.getElementById("link").addEventListener("click", function(evt) {
    alert("Clicked!");
    evt.preventDefault();
}, false);

Для прослушивателей событий, подключенных через attachEvent() в IE, return false или window.event.returnValue = false будет делать:

document.getElementById("link").attachEvent("onclick", function() {
    alert("Clicked!");
    return false;
});
0 голосов
/ 05 декабря 2013

У меня были некоторые проблемы с браузером при использовании метода return false.

Мне повезло, что я просто заменил href на следующий:

function removeLink(elementName) {
   var o = document.getElementById(elementName);
   o.href = 'javascript: (function(){})();';
   o.target = "_self";
}

У меня естьобнаружил, что эта пустая функция в свойстве href была самой простой.

Я добавил часть target _self, потому что когда я разрабатываю, я иногда открываю эти ссылки (которые я хочу отображать при наведении) в новом окне/ таб.Они должны быть направлены на текущее окно, чтобы действительно ничего не делать ... lol.

Надеюсь, это поможет кому угодно.

Brynn

0 голосов
/ 24 марта 2011

Вы говорите "preventDefault() помогает", но вы говорите, что это не работает? Я не уверен, что понимаю. Вы пробовали это:

addEventListener("DOMContentLoaded", function() {
    document.getElementById("link").addEventListener("click", function(e) {
        alert("Clicked!");
        e.preventDefault();
        return false;
    }, false);
    alert("Click handler bound!");
}, false);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...