Вопрос по jquery-events, return, jquery – вернуть false из события нажатия jQuery

51

У меня есть события клика, настроенные так:

$('.dialogLink')
    .click(function () {
        dialog(this);
        return false;
    });

У всех есть & quot; возвращать ложь & quot;

Может ли кто-нибудь объяснить, что это делает и нужно ли это?

Ваш Ответ

3   ответа
-1

должно ли происходить поведение браузера по умолчанию. В случае нажатия на ссылки, это будет следовать по ссылке, но разница наиболее заметна в обработчиках отправки формы, где вы можете отменить отправку формы, если пользователь допустил ошибку при вводе информации.

Это ничего не добавляет к разговору, так как этот точный ответ, дословно, уже был предоставлен в прошлом.
90

false из обработчика событий он предотвращает действие по умолчанию для этого события и останавливает всплывающее событие через DOM. То есть это эквивалентно выполнению этого:

$('.dialogLink')
   .click(function (event) {
       dialog(this);
       event.preventDefault();
       event.stopPropagation();
});

Если'.dialogLink' является<a> элемент, то его действие по умолчанию при щелчке состоит в том, чтобы перейти кhref, возвратеfalse из обработчика щелчков предотвращает это.

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

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

Дальнейшее чтение:

event.preventDefault() event.stopPropagation()
Было бы то же самое, если бы я кодировал эти два события в функцию диалога? Alan2
Как человек, который только что столкнулся с этой проблемой и потратил немного времени, чтобы понять, что происходит, я бы поспорилreturn false не так ясно, как сказать, чтобы предотвратить дефолт и остановка распространения.
Эти две строки не являются событиями, они являются вызовами методовevent объект, который вы заметите, я добавил в качестве параметра в функцию. jQuery устанавливает этот параметр наevent объект, связанный с каким-либо событием Если вы прошлиevent возражать противdialog() Функция может вызвать эти методы, но я думаю, что это гораздо более легко обслуживать, если вы сделаете это непосредственно там, где я это показал. Сказав это, я рекомендую вам придерживатьсяreturn false у вас уже есть: это короче.
4

должно ли происходить поведение браузера по умолчанию. В случае нажатия на ссылки, это будет следовать по ссылке, но разница наиболее заметна в обработчиках отправки формы, где вы можете отменить отправку формы, если пользователь допустил ошибку при вводе информации.

Я не верю, что для этого есть спецификация W3C. Все древние интерфейсы JavaScript, подобные этому, получили псевдоним «DOM 0» и в основном не указаны. Возможно, вам повезет, прочитав старую документацию Netscape 2.

Современный способ достижения этого эффекта заключается вevent.preventDefault()и это указано вDOM 2 Спецификация событий.

Таким образом, правильный путь будет:

$('.dialogLink')
   .click(function (e) {
       dialog(this);
       e.preventDefault();
       e.stopPropagation(); // Stop bubbling up
});
@Gemma, это допустимо и определяетсяW3C, :) Так что это безопасно для использования. Но в JQuery, да,return false делает ту же работу. :)
Вы упомянули «современное» Кстати, но если это то же самое, не лучше ли код возвращать false и сохранить несколько байтов из скрипта :-) Alan2
Если это обработчик событий jQuery, вы можете быть уверены, чтоreturn false сделаю работу.
Согласился с @nnnnnn.

Похожие вопросы