Event.preventDefault () vs grąžinti klaidingą

Kai noriu, kad kiti įvykių tvarkytojai būtų paleisti po tam tikro įvykio, galiu naudoti vieną iš dviejų būdų. Aš naudosiu jQuery pavyzdžius, tačiau tai taip pat taikoma paprastam JS:

1. event.preventDefault()

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

2. return false

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

Ar yra didelis skirtumas tarp šių dviejų būdų, kaip sustabdyti įvykio plitimą?

Man, return false; paprastesnis, trumpesnis ir greičiausiai mažesnis klaidų tikimybė nei vykdant metodą. Šiuo metodu turėtumėte žinoti teisingą atvejį, skliaustelius ir pan.

Be to, noriu paskambinti šiuo metodu, turiu apibrėžti pirmąjį atšaukimo parametrą. Galbūt yra keletas priežasčių, kodėl turėčiau to vengti ir naudoti „ preventDefault ? Kas yra geriausias būdas?

2661
31 авг. nustatė RaYell 31 rug 2009-08-31 14:58 '09, 14:58, 2009-08-31 14:58
@ 13 atsakymų

return false JQuery“ įvykių tvarkytojo return false iš tikrųjų yra tokia pati kaip e.preventDefault skambutis ir e.stopPropagation perduodamame jQuery.Event objekte .

e.preventDefault() neleis įvykiui įvykti pagal nutylėjimą, e.stopPropagation() neleis įvykiui patinti ir return false e.stopPropagation() . Atkreipkite dėmesį, kad šis elgesys skiriasi nuo įprastų (ne „jQuery“) įvykių tvarkytojų, kuriuose, ypač, return false , nesustabdo įvykio iš burbulų.

Šaltinis: John Resig

Bet kokia nauda, ​​gauta naudojant event.preventDefault () daugiau nei "return false", jei norite atšaukti paspaudimą?

2609
31 авг. atsakymas duotas karim79 31 rug . 2009-08-31 15:05 '09 15:05 2009-08-31 15:05

Mano patirtis rodo, kad naudojant „event.preventDefault“ () funkciją naudokite bent vieną aiškų pranašumą su grįžtamu klaidingu. Tarkime, kad užfiksuoti paspaudimo įvykį privalomojoje žyma, kitaip būtų didelė problema, jei vartotojas turėjo eiti iš dabartinio puslapio. Jei jūsų paspaudimų tvarkytojas naudoja grįžtamąjį klaidą, kad būtų išvengta naršymo naršymo, tai atveria galimybę, kad vertėjas nepasiekia grąžinimo ataskaitos, o naršyklė toliau vykdys numatytąjį inkaro žymių elgesį.

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

„Event.preventDefault“ () privalumas yra tas, kad galite jį pridėti kaip pirmąją tvarkyklės eilutę, taip užtikrinant, kad numatytasis elgesys neveiks pagal nutylėjimą, neatsižvelgiant į tai, ar paskutinė funkcijos eilutė nepasiekiama (pvz., .).

 $('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 atsakymas, sausio 23 d 2011-01-23 01:37 '11 prie 1:37 2011-01-23 01:37

Tai ne tai, ką pavadinote, klausimas yra „javascript“; Tai jQuery dizaino klausimas.

jQuery ir anksčiau susijusi citataJohn Resig ( karim79 pranešimas ), atrodo, yra nesusipratimas, kaip paprastai veikia įvykių tvarkytojai.

Faktas: įvykio tvarkytojas, kuris grąžina klaidą, neleidžia numatyto veiksmo šiam įvykiui. Tai netrukdo įvykio plitimui. Įvykių tvarkytojai visada dirbo tokiu būdu, pradedant nuo senų „Netscape Navigator“ dienų.

MDN dokumentacijoje paaiškinama, kaip veikia return false įvykis tvarkyklėje.

Kas vyksta jQuery, nėra tas pats, kas vyksta renginių tvarkytojams. DOM renginių klausytojai ir su jais susiję įvykiai yra kitoks dalykas.

Daugiau skaitymo žr. Priedą „MSN“ ir „ W3C DOM 2“ įvykių dokumentuose .

89
21 июня '10 в 0:31 2010-06-21 00:31 atsakymą pateikė „ Garrett“ birželio 21 d., 10 val. 0:31 2010-06-21 00:31

Paprastai jūsų pirmasis variantas ( preventDefault() ) yra tas, kurį reikia atlikti, tačiau turite žinoti, kokiame kontekste esate ir kokie yra jūsų tikslai.

Kuras Jūsų kodavimas turi puikų straipsnį dėl return false; vs event.preventDefault() vs event.stopPropagation() vs event.stopImmediatePropagation() .

PASTABA. Pirmiau esančioje nuorodoje „Kuro kodavimas“ jau ilgą laiką buvo sukurta klaida 5xx. Radau jo kopiją interneto archyve , atspausdinau PDF formatu ir įdėjau į „Dropbox“: archyvuotas straipsnis return false; vs event.preventDefault() vs event.stopPropagation() vs event.stopImmediatePropagation() (PDF)

>
58
09 апр. Atsakymas pateikiamas JAAulde 09 balandžio. 2011-04-09 21:32 '11 prie 21:32 2011-04-09 21:32

Naudojant jQuery, return false atliekant 3 atskiras operacijas, kai skambinate:

  • event.preventDefault();
  • event.stopPropagation();
  • Nustokite skambinti atgal ir grįžkite iškart, kai skambinate.

Žr. „ JQuery“ įvykiai: „Stop“ („Mis“), naudojant „Return False“ (daugiau informacijos) ir daugiau pavyzdžių.

51
19 февр. James Drinkard atsakymas 19 vasario mėn. 2013-02-19 18:54 '13, 18:54, 2013-02-19 18:54

onClick renginyje galite pakabinti daug funkcijų vienam elementui. Kaip galite būti tikri, kad false bus paskutinis? preventDefault , kita vertus, neabejotinai užkerta kelią tik elemento numatytam elgesiui.

38
31 авг. Eldaro Djafarovo atsakymas rugpjūčio 31 d 2009-08-31 15:02 '09 15:02 2009-08-31 15:02

Manau

event.preventDefault()

- w3c yra konkretus įvykių atšaukimo metodas.

Tai galite perskaityti W3C specifikacijoje „ Atšaukti įvykius“ .

Be to, visais atvejais negalite naudoti grąžinimo klaidingo. Pateikiant „JavaScript“ funkciją „href“ atribute ir grąžinant klaidingą, vartotojas bus nukreiptas į puslapį su klaidinga eilute.

18
31 авг. atsakymas pateikiamas rahul 31 rug. 2009-08-31 15:04 '09, 15:04 2009-08-31 15:04

Manau, kad geriausias būdas tai padaryti yra naudoti event.preventDefault() nes jei event.preventDefault() tvarkyklėje yra event.preventDefault() , tuomet grįžtamas false pareiškimas bus praleistas ir elgesys bus priešingas norimam.

Tačiau, jei esate tikri, kad kodas nesukels jokių išimčių, galite pereiti prie bet kokio pageidaujamo metodo.

Jei vis tiek norite grįžti į false , tada galite įdėti visą tvarkytojo kodą į „catch catch block“, kaip parodyta žemiau:

 $('a').click(function (e) { try{ your code here......... } catch(e){} return false; }); 
13
09 марта '13 в 22:27 2013-03-09 22:27 atsakymą pateikė Naga Srinu Kapusetti kovo 9 d. 13 d. 22:27 2013-03-09 22:27

Skirtumas tarp prevDefault () ir grąžina klaidingą :

estääDefault () : jis tiesiog sustabdo numatytąjį naršyklės elgesį.

grąžinti klaidingą : jis vadina 3 atskirus objektus:

  • Jis sustabdo numatytąjį naršyklių elgesį.
  • Tai neleidžia DOM įvykiui daugintis.
  • Nustokite skambinti atgal ir grįžkite iškart, kai skambinate.

Naudoja pagal jūsų reikalavimą:

1) Jei norite išjungti numatytąjį naršyklės elgesį, naudokite funkciją „PrevDefault“ ().

2) Jei norite užkirsti kelią numatytam naršyklės elgesiui ir užkirsti kelią DOM įvykiui dauginti, naudokite grįžti false.

0
02 дек. atsakymas, kurį pateikė GSB. 2017-12-02 22:18 '17, 10:18 pm 2017-12-02 22:18

Iš esmės tai yra, kaip jūs derinate dalykus, nes jQuery yra struktūra, kuri daugiausia orientuota į HTML elementus, dažniausiai užkertant kelią numatytam nustatymui, bet tuo pačiu metu nustojate plisti į burbulą.

Taigi, tiesiog galime pasakyti, kad false grįžimas į jQuery yra lygus:

grįžti false yra e.preventDefault ir e.stopPropagation

Tačiau taip pat nepamirškite apie tai funkcijose, susijusiose su „jQuery“ arba „DOM“, kai paleidžiate jį ant elemento, iš esmės jis neleidžia viskas nuo šaudymo, įskaitant numatytąjį elgesį ir įvykių sklaidą.

Iš esmės, prieš naudodami return false; pirmiausia suprasti, kas yra e.preventDefault(); ir e.stopPropagation(); tada, jei manote, kad jums reikia abiejų tuo pačiu metu, tiesiog jį naudokite.

Taigi, iš esmės šis kodas yra žemiau:

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

lygus šiam kodui:

 $('div').click(function (event) { event.preventDefault(); event.stopPropagation(); }); 
0
18 июля '18 в 14:07 2018-07-18 14:07 Atsakymą Alireza pateikė liepos 18 d., 18 val. 14:07 2018-07-18 14:07

Pagrindinis skirtumas tarp „ return false ir „ event.preventDefault() yra tas, kad jūsų kodas žemiau return false , ir event.preventDefault() jūsų kodas bus įvykdytas po šio pareiškimo.

Kai rašote grąžinimo klaidą, užkulisiuose atliksite šiuos dalykus.

 * Stops callback execution and returns immediately when called. * event.stopPropagation(); * event.preventDefault(); 
0
09 февр. Atsakymas, kurį pateikė Abdullah Shoaib 09 vasaris 2018-02-09 11:14 '18 at 11:14 2018-02-09 11:14

Mano nuomone, mano patirtis rodo, kad visada geriau naudoti

 event.preventDefault() 

Praktiškai, jei reikia, sustabdyti ar užkirsti kelią įvykio siuntimui, o ne return false event.preventDefault() veikia gerai.

0
29 сент. Atsakymas pateikiamas Dilip0165 29 sep . 2014-09-29 14:28 '14, 14:28 2014-09-29 14:28

e.preventDefault ();

Jis tiesiog sustabdo numatytąjį elemento veiksmą.

Pavyzdys:

neleidžia hipersaitui sekti URL, neleidžia siųsti formos pateikimo mygtuko. Kai turite daug įvykių tvarkytojų, ir jūs tik norite užkirsti kelią numatytam įvykiui dėl to, ir dėl to daug kartų, nes tai mums reikia naudoti funkcijos viršuje ().

Priežastis: -

e.preventDefault(); yra tai, kad kode kažkas neveikia kode, tai leis jums atlikti nuorodą ar formą, kad galėtumėte siųsti ar leisti vykdyti ar leisti atlikti bet kokius veiksmus, kurių reikia atlikti. link arba pateikimas bus išsiųstas ir vis tiek leidžia įvykiui tęsti.

 <!DOCTYPE html> <html > 
0
27 апр. Atsakymas, kurį pateikė Parth Raval Apr 27 2018-04-27 09:55 '18 at 9:55 2018-04-27 09:55

Kiti klausimai apie „ žymas „ arba „ Klauskite“