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
замест гэтага? Які лепшы спосаб?
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?
На маю вопыту, існуе хаця б адно відавочнае перавага пры выкарыстанні функцыі 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; });

Перавага выкарыстання 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. });
Гэта не так, як вы яго назвалі, пытанне "JavaScript"; гэта пытанне аб дызайне jQuery.
jQuery і раней звязаная цытата ад John Resig ( karim79 паведамленне ), па-відаць, з'яўляецца крыніцай неразумення таго, як апрацоўшчыкі падзей у цэлым працуюць.
Факт: апрацоўшчык падзей, які вяртае false, прадухіляе дзеянне па змаўчанні для гэтай падзеі. Гэта не спыняе распаўсюджванне падзеі. Апрацоўшчыкі падзей заўсёды працавалі такім чынам, пачынаючы з старых дзён Netscape Navigator.
Дакументацыя з MDN тлумачыць, як return false
ў апрацоўшчыку падзей працуе
Што адбываецца ў jQuery, гэта не тое ж самае, што адбываецца з апрацоўшчыкі падзей. Слухачы падзей DOM і "прымацаваныя" падзеі MSIE - гэта зусім іншая справа.
Для далейшага чытання см. AttachEvent ў MSDN і W3C DOM 2 Дакументацыя па падзеях .
Як правіла, ваш першы варыянт ( 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)
Пры выкарыстанні Jquery return false
выконвае 3 асобныя аперацыі, калі вы выклікаеце гэта:
-
event.preventDefault();
-
event.stopPropagation();
- Прыпынак выканання зваротнага выкліку і вяртанне неадкладна пры выкліку.
См. JQuery Events: Stop (Mis) Выкарыстанне Return False для атрымання дадатковай інфармацыі і прыкладаў.
Вы можаце павесіць мноства функцый у падзея onClick
для аднаго элемента. Як вы можаце быць упэўнены, што false
будзе апошнім? preventDefault
, з другога боку, вызначана прадухіліць толькі паводзіны элемента па змаўчанні.
Я думаю,
event.preventDefault()
- гэта w3c ўказаны спосаб адмены падзей.
Вы можаце прачытаць гэта ў спецыфікацыі W3C на Адмена падзеі .
Таксама вы не можаце выкарыстоўваць return false у кожнай сітуацыі. Пры прадастаўленні функцыі javascript у атрыбуце href і пры вяртанні false, карыстальнік будзе перанакіраваны на старонку з ілжывай радком.
Я думаю, што лепшы спосаб зрабіць гэта - выкарыстоўваць event.preventDefault()
таму што, калі ў апрацоўшчыку event.preventDefault()
нейкае выключэнне, тады якое вяртаецца false
зацвярджэнне будзе прапушчана, а паводзіны будзе процілегла таго, што вы хочаце.
Але калі вы ўпэўнены, што код не будзе выклікаць якіх-небудзь выключэнняў, вы можаце пайсці з любым з метадаў, якія вы хочаце.
Калі вы ўсё яшчэ хочаце перайсці з вяртаннем false
, тады вы можаце змясціць увесь код апрацоўшчыка ў блок catch try, як паказана ніжэй:
$('a').click(function (e) { try{ your code here......... } catch(e){} return false; });
Розніца паміж preventDefault () і вяртае false наступным чынам:
preventDefault (): ён проста спыняе паводзіны браўзэраў па змаўчанні.
return false: ён робіць 3 асобных аб'екта, калі вы яго выклікаеце:
- Ён спыняе паводзіны браўзэраў па змаўчанні.
- Гэта прадухіляе распаўсюджванне падзеі DOM.
- Прыпынак выканання зваротнага выкліку і вяртанне неадкладна пры выкліку.
Выкарыстоўвае згодна з вашым патрабаванні:
1) Калі вы хочаце проста забараніць паводзіны браўзэра па змаўчанні, выкарыстоўвайце функцыю preventDefault ().
2) Калі вы хочаце прадухіліць паводзіны браўзэра па змаўчанні і прадухіліць распаўсюджванне падзеі DOM, выкарыстоўвайце return false.
У прынцыпе, такім чынам вы комбинируете рэчы, таму што 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(); });
Асноўнае адрозненне паміж return false
і event.preventDefault()
заключаецца ў тым, што ваш код ніжэй return false
не будзе выкананы, а ў выпадку event.preventDefault()
ваш код будзе выконвацца пасля гэтага сцвярджэння.
Калі вы пішаце return false, вы робіце наступныя рэчы за кулісамі.
* Stops callback execution and returns immediately when called. * event.stopPropagation(); * event.preventDefault();
Маё меркаванне на маю вопыту кажа, што заўсёды лепш выкарыстоўваць
event.preventDefault()
Практычна для спынення або прадухілення адпраўкі падзеі, калі патрабуецца, а не return false
event.preventDefault()
выдатна працуе.
e.preventDefault ();
Ён проста спыняе дзеянне элемента па змаўчанні.
асобнік Ex.:-
забараняе гіперспасылку прытрымлівацца URL-адрасу, не дазваляе адправіць кнопку адпраўкі формы. Калі ў вас шмат апрацоўшчыкаў падзей, і вы проста хочаце прадухіліць падзея па змаўчанні з-за гэтага, і з-за гэтага шмат разоў, для гэтага нам трэба выкарыстоўваць у верхняй частцы функцыі ().
Прычына: -
Прычына выкарыстання e.preventDefault();
заключаецца ў тым, што ў нашым кодзе дык нешта не атрымліваецца ў кодзе, тады ён дазволіць выканаць спасылку або форму для адпраўкі або дазволіць выкананне або вырашыць любыя дзеянні, якія вам трэба выканаць. Link або submit будзе адпраўлена і ўсё яшчэ дазволіць працягнуць распаўсюд падзеі.
<!DOCTYPE html> <html >
Іншыя пытанні па пазнаках JavaScript JQuery JavaScript-Events Event-Handling Event-propagation або Задайце пытанне