Event.preventDefault () vs. 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 не спыняе падзея ад бурбалак.

Крыніца: John Resig

Любая карысць ад выкарыстання 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. Выкажам здагадку, вы захапілі падзея click на тэгу прывязкі, бо гэта было б вялікай праблемай, калі б карыстальнік павінен быў перайсці ад бягучай старонкі. Калі ваш апрацоўшчык клікаў выкарыстоўвае 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. }); away $('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 23 студз. 2011-01-23 01:37 '11 у 01:37 2011-01-23 01:37

Гэта не так, як вы яго назвалі, пытанне "JavaScript"; гэта пытанне аб дызайне jQuery.

jQuery і раней звязаная цытата ад John Resig ( karim79 паведамленне ), па-відаць, з'яўляецца крыніцай неразумення таго, як апрацоўшчыкі падзей у цэлым працуюць.

Факт: апрацоўшчык падзей, які вяртае 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; VS event.preventDefault() VS event.stopPropagation() VS event.stopImmediatePropagation() .

ЗАЎВАГА. У прыведзенай вышэй спасылцы "Паліва вашага кадавання" ужо даволі доўгі час вырабляецца памылка 5xx. Я знайшоў яго копію ў Інтэрнэт-архіве , раздрукаваў яго ў фармаце PDF і змясціў у Dropbox: Архівавана артыкул у return false; VS event.preventDefault() VS event.stopPropagation() VS 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 Events: Stop (Mis) Выкарыстанне Return False для атрымання дадатковай інфармацыі і прыкладаў.

51
19 февр. адказ дадзены James Drinkard 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 на Адмена падзеі .

Таксама вы не можаце выкарыстоўваць return false у кожнай сітуацыі. Пры прадастаўленні функцыі javascript у атрыбуце href і пры вяртанні false, карыстальнік будзе перанакіраваны на старонку з ілжывай радком.

18
31 авг. адказ дадзены rahul 31 жнів. 2009-08-31 15:04 '09 у 15:04 2009-08-31 15:04

Я думаю, што лепшы спосаб зрабіць гэта - выкарыстоўваць event.preventDefault() таму што, калі ў апрацоўшчыку event.preventDefault() нейкае выключэнне, тады якое вяртаецца false зацвярджэнне будзе прапушчана, а паводзіны будзе процілегла таго, што вы хочаце.

Але калі вы ўпэўнены, што код не будзе выклікаць якіх-небудзь выключэнняў, вы можаце пайсці з любым з метадаў, якія вы хочаце.

Калі вы ўсё яшчэ хочаце перайсці з вяртаннем false , тады вы можаце змясціць увесь код апрацоўшчыка ў блок catch try, як паказана ніжэй:

 $('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 () і вяртае false наступным чынам:

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 is 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 адказ дадзены Alireza 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 февр. адказ дадзены Abdullah Shoaib 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 ();

Ён проста спыняе дзеянне элемента па змаўчанні.

асобнік Ex.:-

забараняе гіперспасылку прытрымлівацца URL-адрасу, не дазваляе адправіць кнопку адпраўкі формы. Калі ў вас шмат апрацоўшчыкаў падзей, і вы проста хочаце прадухіліць падзея па змаўчанні з-за гэтага, і з-за гэтага шмат разоў, для гэтага нам трэба выкарыстоўваць у верхняй частцы функцыі ().

Прычына: -

Прычына выкарыстання e.preventDefault(); заключаецца ў тым, што ў нашым кодзе дык нешта не атрымліваецца ў кодзе, тады ён дазволіць выканаць спасылку або форму для адпраўкі або дазволіць выкананне або вырашыць любыя дзеянні, якія вам трэба выканаць. Link або submit будзе адпраўлена і ўсё яшчэ дазволіць працягнуць распаўсюд падзеі.

 <!DOCTYPE html> <html > 
0
27 апр. адказ дадзены Parth Raval 27 крас. 2018-04-27 09:55 '18 у 09:55 2018/04/27 09:55

Іншыя пытанні па пазнаках або Задайце пытанне