preventDefault()與return false區別
關於兩者的具體用法可以參閱如下兩篇文章:
(1).JavaScript return 語句一章節。
(2).JavaScript preventDefault()一章節。
preventDefault是一個方法,return false是函式返回值。
兩者之間的區別是十分明顯的,甚至可以說從直覺上兩者功能並無任何相同之處。
但是它們卻有一個共同之處,都能夠阻止事件的預設行為。
首先看一段程式碼例項:
[HTML] 純文字檢視 複製程式碼執行程式碼<!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <style type="text/css"> div { width:150px; height:30px; line-height:30px; margin:0px auto; } </style> <script type="text/javascript"> window.onload=function() { let one = document.getElementById("one"); let two = document.getElementById("two"); one.onclick = function (ev) { ev.preventDefault(); } two.onclick = function (ev) { return false; } } </script> </head> <body> <div><a href="http://www.softwhy.com" id="one">螞蟻部落一</a></div> <div><a href="http://www.softwhy.com" id="two">螞蟻部落二</a></div> </body> </html>
點選連結會出現連結跳轉動作,這個跳轉動作對連結<a>元素來說就是click事件預設行為。
上述程式碼中,點選連結都不能實現連結的跳轉行為,可見兩種方式都可以阻止預設行為。
僅從上面例子看,在阻止預設行為方面是完全一致的,但是兩者還是有區別的。
特別說明:本文介紹的是原生JavaScript中preventDefault方法與return false之間的區別。
程式碼例項如下:
[HTML] 純文字檢視 複製程式碼執行程式碼<!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <style type="text/css"> div { width:150px; height:30px; line-height:30px; margin:0px auto; } </style> <script type="text/javascript"> window.onload=function() { let one = document.getElementById("one"); let two = document.getElementById("two"); one.addEventListener('click', function(event) { return false; }, false); two.onclick = function (ev) { return false; } } </script> </head> <body> <div><a href="http://www.softwhy.com" id="one">螞蟻部落一</a></div> <div><a href="http://www.softwhy.com" id="two">螞蟻部落二</a></div> </body> </html>
程式碼分析如下:
(1).第一個連結使用addEventListener方式註冊click事件處理函式。
(2).第二個連結使用屬性方式註冊事件處理函式。
(3).在第一種方式中,return false阻止預設行為的功能失效,但是第二種方式依然有效。
(4).如果將第一種方式中的return false替換為ev.preventDefault()可以實現阻止預設行為的功能。
總結如下:
(1).如果不考慮瀏覽器相容問題,preventDefault方法阻止預設行為專業且全面的,return false乾的是副業。
(2).return false在addEventListener註冊的事件處理函式中無法阻止事件預設行為,畢竟它不是專業的。
最後再強調一下,上述總結的區別一定是在原生JavaScript中,有些封裝庫或者外掛修改了這一行為。
相關文章
- CSS 中 stopPropagation, preventDefault 和 return false 的區別CSSFalse
- js中return、return true、return false的區別JSFalse
- JavaScript return falseJavaScriptFalse
- 'return await promise' 與 'return promise' 這細微的區別AIPromise
- exit(0)與exit(1)、return的區別
- break,continue,return區別
- exit和return的區別
- onclick="return check()" 和 onclick="check()" 區別
- Python教程:return和yield的區別Python
- JavaScript中0, "", null, false, undefined的區別JavaScriptNullFalseUndefined
- C++中的return和exit區別C++
- return,continue和break之間的區別
- C#中continue、return、break的區別及作用C#
- JavaScript--分支+迴圈(continue、break、return的區別)JavaScript
- JavaScript preventDefault()JavaScript
- Flutter url_launcher 報錯 canLaunch will return false(Android)的解決辦法FlutterFalseAndroid
- Python解惑:True與FalsePythonFalse
- true || false && falseFalse
- ??與?:的區別
- 好程式設計師Python培訓分享print和return的作用及區別程式設計師Python
- mouseenter與mouseover區別
- currentTarget與target區別
- mouseout與mouseleave區別
- classList與className區別
- innerText與textContent區別
- GET與POST區別
- let與const區別
- NIO與IO區別
- 區別mouseover與mouseenter?
- ApplicationContext 與 BeanFactory 區別APPContextBean
- setInterval()與setTimeout()區別
- match()與exec()區別
- localStorage與sessionStorage 區別Session
- showModal()與show() 區別
- <section>與<article> 區別
- onmouseover與onmouseenter區別
- offset與style區別
- cellpadding與cellspacing 區別padding