В обработке события JavaScript, почему “возвращают false” или “event.preventDefault ()” и, “остановка потока события” будет иметь значение?

Сказано, что то, когда мы обрабатываем "событие щелчка", возвращая false или звоня event.preventDefault () имеет значение, в который

различие - то, что preventDefault только предотвратит действие стандартного события для появления, т.е. перенаправление страницы при щелчке ссылки, представление формы, и т.д. и возвращать false также остановит поток события.

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

$('#clickme').click(function() { … })

возвращение false будет мешать другим обработчикам работать?

Я нахожусь на Mac теперь и так могу только использовать Firefox и Chrome, но не IE, который имеет другую модель событий и протестировал ее на FF и Chrome путем добавления 3 обработчиков, и все 3 обработчика работали без любой остановки …. таким образом, какова реальная разница, или, там ситуация, где "остановка потока события" не желательна?

это связано с

Используя анимационный jQuery (), если элемент, на который нажимают, является" ", функция должна все еще возвратить false?

и

Что является различием между e.preventDefault (); и возвратите false?

13
задан Community 23 May 2017 в 12:30
поделиться

5 ответов

надеется, что этот код может вам это объяснить ...

html

<div>
<a href="index.html" class="a1">click me</a>
<a href="index.html" class="a2">click me</a>
</div>​

jquery

$('div').click(function(){
    alert('I am from <div>');
});

$('a.a1').click(function(){
    alert('I am from <a>');
    return false; // this will produce one alert
});

$('a.a2').click(function(e){
    alert('I am from <a>');
    e.preventDefault(); // this will produce two alerts
});​

demo

или

$('div').click(function(){
    alert('I am from <div>');
});

$('a').click(function(){
    alert('I am from <a>');
});

$('a.a1').click(function(){
    alert('I am from <a class="a1">');
    return false;
});

$('a.a2').click(function(e){
    alert('I am from <a class="a2">');
    e.preventDefault();
});​

demo 2

13
ответ дан 1 December 2019 в 21:23
поделиться

Запись return false или e.preventDefault () не предотвратит запуск других обработчиков.

Скорее, они предотвратят реакцию браузера по умолчанию, такую ​​как переход по ссылке.

В jQuery вы можете написать e.stopImmediatePropagation () , чтобы предотвратить запуск других обработчиков.

9
ответ дан 1 December 2019 в 21:23
поделиться

return false и preventDefault () предназначены для предотвращения действия браузера по умолчанию, связанного с событием (например, переход по ссылке при нажатии). Для каждого из трех сценариев существует свой метод:

1. Обработчик событий добавлен с помощью addEventListener () (браузеры, отличные от IE) . В этом случае используйте метод preventDefault () объекта Event . Остальные обработчики события по-прежнему будут вызываться.

function handleEvent(evt) {
    evt.preventDefault();
}

2. Обработчик событий добавлен с помощью attachEvent () (IE) . В этом случае установите для свойства returnValue объекта window.event значение true . Другие обработчики события по-прежнему будут вызываться, и они также могут изменить это свойство.

function handleEvent() {
    window.event.returnValue = false;
}

3. Обработчик событий добавлен с помощью атрибута или свойства обработчика событий .

<input type="button" value="Do stuff!" onclick="return handleEvent(event)">

или

button.onclick = handleEvent;

В этом случае return false выполнит задание. Любые другие обработчики событий, добавленные через addEventListener () или attachEvent () , по-прежнему будут вызываться.

function handleEvent() {
    return false;
}
3
ответ дан 1 December 2019 в 21:23
поделиться

Иногда слушатель событий хочет отменить побочные эффекты события, которое интересует. Представьте себе текстовое поле, в котором вы хотите разрешить только числа. Поскольку текстовые поля могут принимать все, что угодно, становится необходимым указать браузеру игнорировать не набранные числа. Это достигается путем прослушивания ключевых событий и возврата false, если введен неправильный ключ.

1
ответ дан 1 December 2019 в 21:23
поделиться

Это не полностью отвечает на ваш вопрос, но на днях я использовал e.preventDefault() в YUI для элемента, чтобы подавить действие href, поскольку я хотел, чтобы только JavaScript onclick событие имело контроль (если JS не обнаружено). В этой ситуации остановка всей цепочки событий не повлияла бы на меня.

Но за пару дней до этого у меня был , вложенный в элемент, и мне пришлось использовать условие в обработчике событий, чтобы определить, является ли щелкнутая цель меткой, поскольку ни e. preventDefault(), ни e.stopEvent() не остановили событие 'click' от (легитимного) срабатывания дважды (кроме IE6).

Что было бы неплохо, так это возможность подавить целую цепочку связанных событий, поскольку я уже пробовал распространение и return false ;, но я всегда собирался получить срабатывание второго события благодаря моему элементу label.


Edit: Я был бы не против узнать, как jquery обработал бы мою ситуацию с двойным событием, если кто-то хочет прокомментировать это.

0
ответ дан 1 December 2019 в 21:23
поделиться
Другие вопросы по тегам:

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