javascript:void(0)用法及常見(jiàn)問(wèn)題分析
使用過(guò)ajax的朋友經(jīng)常會(huì)見(jiàn)到這樣的代碼:here,這里面的void是一個(gè)操作符,該操作符指定要計(jì)算一個(gè)表達(dá)式但是不返回值。javascript:void(0) 在某些情況下會(huì)有瀏覽器不兼容的bug。下面我們先來(lái)看下javascript:void(0) 的基礎(chǔ)介紹及用法,然后再來(lái)看使用它會(huì)出現(xiàn)什么問(wèn)題,該怎么解決。
提示:在學(xué)習(xí)一下內(nèi)容之前,你可以先通過(guò)javascript:void(0) 含義一節(jié)的內(nèi)容來(lái)了解或者復(fù)習(xí)什么是javascript:void(0) !
void 操作符用法格式如下:
1. javascript:void (expression)
2. javascript:void expression
expression 是一個(gè)要計(jì)算的 Javascript 標(biāo)準(zhǔn)的表達(dá)式。表達(dá)式外側(cè)的圓括號(hào)是選的,但是寫(xiě)上去是一個(gè)好習(xí)慣。 (實(shí)現(xiàn)版本 Navigator 3.0)
你可以使用 void 操作符指定超級(jí)鏈接。表達(dá)式會(huì)被計(jì)算但是不會(huì)當(dāng)前文檔處裝入任何內(nèi)容。
下面的代碼創(chuàng)建了一個(gè)超級(jí)鏈接,當(dāng)用戶(hù)以后不會(huì)發(fā)生任何事。當(dāng)用戶(hù)鏈接時(shí),void(0) 計(jì)算為 0,但 Javascript 上沒(méi)有任何效果。
<aherf="javascript:void(0)">點(diǎn)擊此處什么也不會(huì)發(fā)生</a>
下面的代碼創(chuàng)建了一個(gè)超級(jí)鏈接,用戶(hù)單時(shí)會(huì)提交表單。
<ahref="javascript:void(document.form.submit())"> 單此處提交表單</a>
下面代碼則執(zhí)行了subgo()函數(shù),
<a href="javascript:void(0)"onclick="subgo()">點(diǎn)我</a>
在這里,javascript:void(0),沒(méi)啟實(shí)質(zhì)上的作用,它僅僅是一個(gè)死鏈接,執(zhí)行的函數(shù)是subgo()。
<a href="#" onclick="subgo()">點(diǎn)我</a>與<ahref="javascript:void(0)" onclick="subgo()">點(diǎn)我</a>區(qū)別。
<a href="javascript:void(0)"οnclick="javascript:history.back();">返回 </a>
href=”#”,包含了一個(gè)位置信息.默認(rèn)的錨是#top,也就是網(wǎng)頁(yè)的上端,當(dāng)連續(xù)快速點(diǎn)擊此鏈接時(shí)會(huì)導(dǎo)致瀏覽器巨慢甚至崩潰。而javascript:void(0) 僅僅表示一個(gè)死鏈接,沒(méi)有任何信息。所以調(diào)用腳本的時(shí)候最好用void(0)
href="#"與javascript:void(0)的區(qū)別
href="#"方法其實(shí)也是空連接的意思,但是點(diǎn)擊之后會(huì)自動(dòng)跳轉(zhuǎn)到頁(yè)面的最上面,因?yàn)橛昧诉@個(gè)方法就相當(dāng)于點(diǎn)擊了一個(gè)錨記,但是這個(gè)錨記又沒(méi)寫(xiě)ID,所以就默認(rèn)跳轉(zhuǎn)到頁(yè)面頂部。從上面的例子也可以看出,當(dāng)要執(zhí)行某些處理,但是不整體刷新頁(yè)面的情況下,可以使用void(0),但是在需要對(duì)頁(yè)面進(jìn)行refresh的情況下,那就要仔細(xì)了。
其實(shí)我們可以這樣用,這句話(huà)會(huì)進(jìn)行一次submit操作。那什么情況下用void(0)比較多呢,無(wú)刷新,當(dāng)然是Ajax了,看一下Ajax的web頁(yè)面的話(huà),一般都會(huì)看到有很多的void(0),所以在使用void(0)之前,最好先想一想,這個(gè)頁(yè)面是否需要整體刷新。
說(shuō)白了,href="#"這種形式會(huì)整體刷新頁(yè)面,而href="javascript:void(0)" 則不會(huì)。所以如果是空連接的話(huà),還是推薦javascript:void(0)。
href = "#"當(dāng)頁(yè)面有滾動(dòng)條時(shí),點(diǎn)擊后會(huì)返回到頁(yè)面頂端的解決辦法
目前有如下幾種解決辦法:
1、點(diǎn)擊鏈接后不做任何事情
<a href="javascript:void(0);" >test</a> <a href="javascript:;" >test</a> <a href="####" >test</a> //使用2個(gè)到4個(gè)#,見(jiàn)的大多是"####",也有使用"#all"等其他的
2、點(diǎn)擊鏈接后,響應(yīng)用戶(hù)自定義的點(diǎn)擊事件
<a href="javascript:void(0)" onclick="doSomething()">test</a> <a href="#" onclick="doSomething();return false;">什么問(wèn)題都解決了,包括瀏覽器不兼容問(wèn)題</a> //或者直接使用href="" <a href="#" onclick="alert();event.returnValue=false;">test</a>
使用javascript:void(0)會(huì)引起什么問(wèn)題?
鏈接(href)直接使用javascript:void(0)在IE中可能會(huì)引起一些問(wèn)題,比如:造成gif動(dòng)畫(huà)停止播放等,所以,最安全的辦法還是使用“####”。為防止點(diǎn)擊鏈接后跳轉(zhuǎn)到頁(yè)首,onclick事件return false即可。 如果僅僅是想鼠標(biāo)移過(guò),變成手形,則可以使用。
我們可以使用void操作符指定超級(jí)鏈接,如javascript:void(document.form.submit())。表達(dá)式會(huì)被計(jì)算但是不會(huì)在當(dāng)前文檔處裝入任何內(nèi)容,void(0)計(jì)算為0,但在JavaScript上沒(méi)有任何效果,也就是說(shuō)的效果同的效果是一樣的。
既然容易引起問(wèn)題,為何新浪微博,淘寶等大站的首頁(yè)JS操作的href都是javascript:void(0);呢?
有技術(shù)朋友表示在https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/void看到了這個(gè):
<a href=”void(0);” rel=”nofollow”>Click here to do nothing </a><a href=”void(document.body.style.backgroundColor='green');” rel=”nofollow”>Click here for green background </a>
有可能是 javascript:void(0); 既保證了返回值是undefined,又保證如果連接點(diǎn)擊需要處理一些代碼,隨時(shí)將0替換掉就可以。
href上加js是為了防止連接跳轉(zhuǎn),以前用#但是在部分瀏覽器下回跳轉(zhuǎn)到頁(yè)面頂部。這樣就不好了,于是有人想到了添加οnclick=“return false”但是這樣問(wèn)題又來(lái)了,這樣做會(huì)阻止綁定的時(shí)間,比如我們用jquery。于是就有了用href=”javascript:void(0);”的寫(xiě)法,這種做法開(kāi)始確實(shí)是由一些寫(xiě)c的人,因?yàn)榫帉?xiě)習(xí)慣而寫(xiě)的。后來(lái)有人講void函數(shù)去掉了。就有了比較簡(jiǎn)潔的寫(xiě)法,其實(shí)在a在沒(méi)有連接的時(shí)候完全可以去掉href屬性或改用其他元素,只要加個(gè)指向時(shí)的鼠標(biāo)樣式就可以了。根據(jù)個(gè)人習(xí)慣而定。
解決IE下使用javascript:void(0)方法會(huì)跳轉(zhuǎn)的方法
一般情況下,在IE下的A標(biāo)簽使用onclick的方法,在href屬性下都加上javascript:void(0)或者javascript:;
原代碼如下:
<a href="javascript:void(0)" title="關(guān)閉" onclick="delbook();">關(guān)閉</a>
或者:
<a href="javascript:;" title="關(guān)閉" onclick="delbook();">關(guān)閉</a>
以上兩種方法都可能會(huì)出現(xiàn)跳轉(zhuǎn)。
但是你會(huì)發(fā)現(xiàn):在執(zhí)行完clidk事件后會(huì)執(zhí)行javascript:void(0),或者javascript:;
解決辦法:
<a href="javascript:void(0)" title="關(guān)閉" onclick="delbook();return false;">關(guān)閉</a>
或者
<a href="javascript:void(0)" target="_self" title="關(guān)閉" οnclick="delbook();">關(guān)閉</a>
使用return false;可以阻止javascript:void(0)去執(zhí)行。
使用target="_self"可以阻止會(huì)跳轉(zhuǎn)到其他頁(yè)面,因其是空函數(shù),則不會(huì)發(fā)生頁(yè)面刷新。
當(dāng)然,在使用target="_self"的情況下,你可以直接這樣寫(xiě)。
<ahref="javascript:delbook()"target="_self"title="關(guān)閉">關(guān)閉</a>
只要是頁(yè)面中有刷新或者跳轉(zhuǎn)動(dòng)作就要用上面的解決方法。
JS的幾種跳轉(zhuǎn)方式:
1.
window.open(”url“)
2.用自定義函數(shù)
<script> function openWin(tag,obj) { obj.target="_blank"; obj.href = "Web/Substation/Substation.aspx?stationno="+tag; obj.click(); } </script><a href="javascript:void(0)"onclick="openWin(3,this)">點(diǎn)我</a>
3.
window.location.href='';
到此這篇關(guān)于javascript:void(0);用法及常見(jiàn)問(wèn)題解析的文章就介紹到這了,更多相關(guān)javascript:void(0)用法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- JavaScript:void(0)用法及一些常見(jiàn)問(wèn)題解決辦法
- javascript:void(0)用法及常見(jiàn)問(wèn)題解析
- javascript:void(0)的含義及用法實(shí)例
- 詳解javascript void(0)
- javascript:void(0)點(diǎn)擊登錄沒(méi)反應(yīng)怎么解決
- js中javascript:void(0) 真正含義
- js中 javascript:void(0) 用法詳解
- javascript:void(0)是什么意思示例介紹
- javascript:void(0)的作用示例介紹
- javascript:void(0)使用探討
- javascript void(0)的妙用
- javascript:void(0) 的常見(jiàn)使用場(chǎng)景
相關(guān)文章
使用js對(duì)select動(dòng)態(tài)添加和刪除OPTION示例代碼
動(dòng)態(tài)刪除select中的所有options、某一項(xiàng)option以及動(dòng)態(tài)添加select中的項(xiàng)option,在IE和FireFox都能測(cè)試成功,感興趣的朋友可以參考下,希望對(duì)大家有所幫助2013-08-08基于 webpack2 實(shí)現(xiàn)的多入口項(xiàng)目腳手架詳解
這篇文章主要給大家介紹了基于 webpack2 實(shí)現(xiàn)的多入口項(xiàng)目腳手架的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。2017-06-06js簡(jiǎn)單實(shí)現(xiàn)自動(dòng)生成表格功能示例
這篇文章主要介紹了js簡(jiǎn)單實(shí)現(xiàn)自動(dòng)生成表格功能,結(jié)合實(shí)例形式分析了JavaScript針對(duì)數(shù)組元素遍歷與頁(yè)面元素動(dòng)態(tài)操作相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2020-06-06window.addEventListener來(lái)解決讓一個(gè)js事件執(zhí)行多個(gè)函數(shù)
可能你也碰到過(guò)這種情況,就是在js的代碼中用了window.onload后,可能會(huì)影響到body中的onload事件。這時(shí)就要用window.attachEvent和window.addEventListener來(lái)解決一下,需要的朋友可以參考下2012-12-12JS實(shí)現(xiàn)頁(yè)面內(nèi)跳轉(zhuǎn)的簡(jiǎn)單代碼
這篇文章主要介紹了JS實(shí)現(xiàn)頁(yè)面內(nèi)跳轉(zhuǎn)的簡(jiǎn)單代碼,需要的朋友可以參考下2017-09-09