событие.метод preventDefault() и возвращать false (нет в jQuery)


интересно, если event.preventDefault() и return false были одинаковыми.

сделал тесты, и кажется, что

  • если обработчик событий добавлен с использованием старой модели, например

    elem.onclick = function(){
        return false;
    };
    

    затем, return false предотвращает действие по умолчанию, как event.preventDefault().

  • если обработчик событий добавляется с помощью addEventListener, например

    elem.addEventListener(
        'click',
        function(e){
            return false;
        },
        false
    );
    

    затем, return false не мешает по умолчанию действие.

не все браузеры ведут себя так?

есть ли еще различия между event.preventDefault() и return false?

где я могу найти некоторые документы (я не мог в MDN) о return false ведешь себя как event.preventDefault() в некоторых случаях?


мой вопрос касается только простого javascript, а не jQuery, поэтому, пожалуйста, не отмечайте его как дубликат событие.метод preventDefault() и возвращать false, даже если оба вопроса имеют почти такое же название.

3 74

3 ответа:

The спецификация событий объектной модели документа W3C на 1.3.1. Интерфейсы регистрации событий утверждает, что handleEvent в EventListener не имеет возвращаемого значения:

handleEvent Этот метод вызывается, когда происходит событие типа для которого был зарегистрирован интерфейс EventListener. [...]Нет Возврата Значение

под 1.2.4. Отмена Мероприятия в документе также говорится, что

отмена выполняется путем вызова события preventDefault метод. Если один или несколько EventListeners вызывают preventDefault во время любого фаза потока событий действие по умолчанию будет отменено.

который должен препятствовать вам использовать любой эффект, который возврат true / false может иметь в любом браузере и использовать event.preventDefault().

обновление

спецификация HTML5 фактически указывает, как обрабатывать возвращаемое значение отличающийся. раздел 7.1.5.1 спецификации HTML утверждает, что

если возвращаемое значение является логическим значением false WebIDL, то отмените событие.

для всего, кроме события" mouseover".

вывод

Я бы все же рекомендовал использовать event.preventDefault() в большинстве проектов, так как вы будете совместимы со старыми спецификациями и, следовательно, более старыми браузерами. Только если вам нужно только поддерживать передовые браузеры, возврат false для отмены в порядке.

разница между preventDefault, stopPropogation, return false

Table Showing Difference

действие по умолчанию-действие на стороне сервера при возникновении управляющего события.

Предположим, у нас есть div управления и внутри него у нас есть кнопка. Таким образом, div является родительским элементом управления кнопки. У нас есть клиентская сторона нажмите и серверная сторона нажмите событие кнопки. Также у нас есть событие щелчка на стороне клиента div.

при нажатии кнопки на стороне клиента, мы можем контролировать действия родительского контроля и кода на стороне сервера с помощью следующих трех способов:

  • return false - Это позволяет только событие на стороне клиента элемента управления. Событие на стороне сервера и событие на стороне клиента родительского элемента управления не запускается.

  • preventDefault() - это позволяет событие на стороне клиента элемента управления и его родительского элемента управления. Событие на стороне сервера, т. е.. Действие элемента управления по умолчанию не запускается.

  • stopPropogation() - это позволяет стороне клиента как а также событие на стороне сервера элемента управления. Клиентское событие элемента управления не разрешено.

return false Это только для IE, event.preventDefault() поддерживается chrome, ff... современные браузеры