Event.preventDefault () срещу return false

Когато искам други обработчици на събития да се изпълняват след задействане на дадено събитие, мога да използвам един от двата метода. Ще използвам jQuery в примерите, но това се отнася и за plain-JS:

1. event.preventDefault()

 $('a').click(function (e) { // custom handling here e.preventDefault(); }); 

2. return false

 $('a').click(function () { // custom handling here return false; }); 

Има ли значителна разлика между тези два начина за спиране на разпространението на събитието?

За мен се return false; по-опростени, по-кратки и вероятно по-малко податливи на грешки от изпълнението на метод. С този метод трябва да сте наясно с правилния случай, скоби и т.н.

Освен това трябва да дефинирам първия параметър в обратно извикване, за да мога да извикам метода. Може би има няколко причини, поради които трябва да избягвам това и да използвам preventDefault вместо това? Какъв е най-добрият начин?

2661
31 авг. определени от RaYell 31 август 2009-08-31 14:58 '09 в 14:58 2009-08-31 14:58
@ 13 отговора

return false от обработващия събитие на jQuery всъщност е същото като при извикване e.preventDefault и e.stopPropagation в обекта jQuery.Event.

e.preventDefault() попречи на събитието да се появи по подразбиране, e.stopPropagation() попречи на събитието от подуване и return false ще направи и двете. Моля, обърнете внимание, че това поведение е различно от обикновените (не jQuery) манипулатори на събития, в които, по-специално, return false не спира дадено събитие от мехурчета.

Източник: Джон Ресиг

Всяка полза от използването на event.preventDefault () над "return false" за отмяна на href клик?

2609
31 авг. отговорът е даден karim79 31 август. 2009-08-31 15:05 '09 в 15:05 2009-08-31 15:05

Според моя опит, има поне едно ясно предимство, когато използвате функцията event.preventDefault () с return false. Да предположим, че заснемате събитие за кликване в обвързващ етикет, в противен случай би било голям проблем, ако потребителят трябва да отиде от текущата страница. Ако манипулаторът на кликвания използва return false, за да предотврати навигацията в браузъра, той отваря възможността интерпретаторът да не достигне оператора return и браузърът ще продължи да изпълнява поведението по подразбиране за анкерните тагове.

 $('a').click(function (e) { // custom handling here // oops...runtime error...where oh where will the href take me? return false; }); 
border=0

Предимството на използването на event.preventDefault () е, че можете да го добавите като първа линия в манипулатора, като по този начин се гарантира, че поведението по подразбиране няма да работи по подразбиране, независимо от това, дали не е достигнат последният ред от функцията (например, ) ..

 $('a').click(function (e) { e.preventDefault(); // custom handling here // oops...runtime error, but at least the user isn't navigated away. }); 
393
23 янв. Отговор, даден от Jeff Poulton Jan 23 2011-01-23 01:37 '11 в 1:37 2011-01-23 01:37

Това не е това, което сте го нарекли, въпросът е "javascript"; Това е въпрос на проектиране на jQuery.

jQuery и цитираният по- рано цитат от John Resig ( karim79 post ) изглежда е източник на неразбиране на това как работят събития.

Факт: манипулатор на събитие, който връща false, предотвратява действието по подразбиране за това събитие. Това не спира разпространението на събитието. Обработвателите на събития винаги са работили по този начин, започвайки от старите времена на Netscape Navigator.

Документацията на MDN обяснява как се return false в обработващия събития.

Какво се случва в jQuery не е същото като това, което се случва с манипулаторите на събития. Слушателите на събития DOM и прикрепените към MSIE събития са друг въпрос.

За по-нататъшно четене вижте attachEvent в документацията за събития на MSDN и W3C DOM 2 .

89
21 июня '10 в 0:31 2010-06-21 00:31 отговорът е даден от Garrett 21 юни '10 в 0:31 2010-06-21 00:31

Обикновено вашата първа опция ( preventDefault() ) е тази, която трябва да предприемете, но трябва да знаете в какъв контекст се намирате и какви са вашите цели.

Fuel Your Coding има голяма статия за return false; срещу event.preventDefault() срещу event.stopPropagation() срещу event.stopImmediatePropagation() .

ЗАБЕЛЕЖКА. В горепосочената връзка „Гориво вашето кодиране“ от доста време се генерира грешка 5хх. Намерих копие от него в интернет архива , отпечатах го в PDF формат и го поставих в Dropbox: Архивирана статия в return false; срещу event.preventDefault() срещу event.stopPropagation() срещу event.stopImmediatePropagation() (PDF)

>
58
09 апр. Отговорът е даден JAAulde 09 април . 2011-04-09 21:32 '11 в 21:32 2011-04-09 21:32

Когато използвате jQuery, return false изпълнява 3 отделни операции, когато го извикате:

  • event.preventDefault();
  • event.stopPropagation();
  • Спрете да правите обратно извикване и да се връщате веднага, когато се обадите.

Вижте jQuery Събития: Stop (Mis) Използвайки Return False за повече информация и примери.

51
19 февр. Отговор, даден от Джеймс Дринкард на 19 февруари. 2013-02-19 18:54 '13 в 18:54 2013-02-19 18:54

Можете да окачите много функции в събитие за onClick за отделен елемент. Как можете да сте сигурни, че false ще бъде последен? preventDefault , от друга страна, определено ще попречи само на поведението по подразбиране на елемента.

38
31 авг. отговор, даден от Eldar Djafarov 31 август 2009-08-31 15:02 '09 в 15:02 2009-08-31 15:02

Мисля

event.preventDefault()

- w3c е посоченият метод за анулиране на събития.

Можете да прочетете това в спецификацията W3C за Cancel Events .

Също така, не можете да използвате return false във всяка ситуация. При предоставяне на javascript функцията в атрибута href и връщане на false, потребителят ще бъде пренасочен към страница с фалшив низ.

18
31 авг. отговорът е даден на 31 август. 2009-08-31 15:04 '09 в 15:04 2009-08-31 15:04

Мисля, че най-добрият начин да направите това е да използвате event.preventDefault() защото ако има event.preventDefault() в event.preventDefault() на event.preventDefault() , тогава връщането на false ще бъде пропуснато и поведението ще бъде противоположно на това, което искате.

Но ако сте сигурни, че кодът няма да предизвика никакви изключения, можете да отидете с някой от методите, които искате.

Ако все пак искате да отидете с връщане на false , тогава можете да поставите целия код на манипулатора в блок за улов на улов, както е показано по-долу:

 $('a').click(function (e) { try{ your code here......... } catch(e){} return false; }); 
13
09 марта '13 в 22:27 2013-03-09 22:27 отговорът е даден от Naga Srinu Kapusetti март 09 '13 в 22:27 2013-03-09 22:27

Разликата между preventDefault () и връща фалшиво, както следва:

preventDefault () : той просто спира поведението на браузъра по подразбиране.

return false : той прави 3 отделни обекта, когато го извикате:

  • Той спира поведението на браузърите по подразбиране.
  • Това предотвратява разпространението на DOM събитие.
  • Спрете да правите обратно извикване и да се връщате веднага, когато се обадите.

Използва се според вашите изисквания:

1) Ако искате да забраните поведението на браузъра по подразбиране, използвайте функцията preventDefault ().

2) Ако искате да предотвратите поведението на браузъра по подразбиране и да предотвратите разпространението на DOM събитие, използвайте return false.

0
02 дек. отговор, даден от GSB 02 декември. 2017-12-02 22:18 '17 в 22:18 часа 2017-12-02 22:18

По принцип, това е начинът, по който комбинирате нещата, защото jQuery е структура, която се фокусира основно върху HTML елементи, най-вече предотвратяващи по подразбиране, но в същото време спрете да се разпространявате в балона.

Така можем просто да кажем, че връщането на false в jQuery е равно на:

return false е e.preventDefault и e.stopPropagation

Но също така не забравяйте за това във функции, свързани с jQuery или DOM, когато го стартирате на елемент, основно предотвратява всичко от изпичане, включително поведението по подразбиране и разпространението на събития.

По принцип, преди да използвате return false; първо разберете какво е e.preventDefault(); и e.stopPropagation(); тогава, ако мислите, че се нуждаете и от двете едновременно, просто го използвайте.

Така че по принцип този код е по-долу:

 $('div').click(function () { return false; }); 

равен на този код:

 $('div').click(function (event) { event.preventDefault(); event.stopPropagation(); }); 
0
18 июля '18 в 14:07 2018-07-18 14:07 Отговорът е даден от Алиреза на 18 юли '18 в 14:07 2018-07-18 14:07

Основната разлика между return false и event.preventDefault() е, че кодът по-долу return false няма да бъде изпълнен, а в случай на event.preventDefault() вашият код ще бъде изпълнен след този оператор.

Когато пишете return false, правите следните неща зад кулисите.

 * Stops callback execution and returns immediately when called. * event.stopPropagation(); * event.preventDefault(); 
0
09 февр. Отговор, даден от Абдулах Шоаиб 09 февруари. 2018-02-09 11:14 '18 в 11:14 2018-02-09 11:14

Моето мнение от моя опит казва, че винаги е по-добре да се използва

 event.preventDefault() 

Практически да спрете или предотвратите изпращането на събитие, когато е необходимо, вместо да return false event.preventDefault() работи добре.

0
29 сент. Отговорът е даден Dilip0165 29 сеп . 2014-09-29 14:28 '14 в 14:28 2014-09-29 14:28

e.preventDefault ();

Той просто спира действието по подразбиране на елемента.

Екземпляр Пример:

забранява хипервръзката да следва URL адреса, не позволява изпращането на бутона за изпращане на формуляра. Когато имате много манипулатори на събития, и просто искате да предотвратите събитие по подразбиране, поради това, и поради това много пъти, за това ние трябва да използваме в горната част на функцията ().

Причина: -

Причина за използване на e.preventDefault(); се крие във факта, че в нашия код, така че нещо не работи в кода, то то ще ви позволи да изпълните връзката или формата, за да изпратите или разрешите изпълнение или да разрешите каквито и да е действия, които трябва да изпълните. link или submit ще бъдат изпратени и все пак ще позволят на събитието да продължи.

 <!DOCTYPE html> <html > 
0
27 апр. Отговор, даден от Parth Raval 27 април 2018-04-27 09:55 '18 в 9:55 2018-04-27 09:55