2011-01-30 52 views
7

我不打算開始辯論。#或javascript:void(0)?

如果我們想要使用onClick事件,我們應該以某種方式禁用href來觸發。 - 它是否正確 ?

如果以上是正確的,我認爲javascript:void(0)具有不觸發滾動行爲的優點。

這些假設是否正確?我不打算搜索嵌合體,但我的任務是尋找一種方式,以跨瀏覽器的方式設置按鈕樣式,沒有任何輔助功能(完全沒有),沒有黑客和怪癖。

+0

@delnan:它滾動到頂部一般。 – configurator 2011-01-30 12:51:45

+1

根本不要在html中使用`onclick`事件。 – 2011-01-30 12:53:50

+0

@delna:1)您的頁面必須具有必須啓用滾動條的垂直高度; 2)將href =「#」放在頁面中間的相同位置,向下滾動,以便您的href =「#」保持在視口之上。 3)點擊。 ;) – MEM 2011-01-30 12:54:21

回答

16

如果您想阻止遵循該鏈接,您應該在您的點擊處理程序(IE中的event.returnValue = false;)中添加event.preventDefault()

看來你剛剛在看起來的鏈接,而不是其功能(或目的)。如果是這樣,您可以使用帶有CSS的button來相應地設置它。

應該避免與href內容#javascript:void(0)有真正的聯繫。

進一步解釋:

使用鏈接只是有一些「點擊」是不好的。鏈接具有明顯的語法意義。由於您可以爲每個元素分配一個click事件處理程序,因此您可以使用任何其他元素。

語法上最正確的一個(imo)將是button,因爲您仍然可以使用tab導航它們。你可以用CSS樣式,使它們看起來像一個鏈接,如果你想(see this example)

現在關於防止默認動作:

假設你有一個正確的href值,你正常鏈接要攔截點擊。在

link.addEventListener('click', function(event){ 
    // some code 
    event.preventDefault(); 
}, false); 

使用event.preventDefault()分配給該元素的單擊處理程序,如防止默認操作,它在一個鏈接的情況下,下面的URL。

(上面的代碼是W3C兼容的瀏覽器的例子,IE是有點不同)

0

如果到具有href,使用javascript:void(0),因爲它沒有任何效果,不像#。但是,你可以沒有HREF可言,給a一個class,使它看起來像一個鏈接,如:

/* in stylesheet */ 
a.scriptlink { 
    color: blue; 
    text-decoration: underline; 
    cursor: pointer 
} 

<!-- in HTML --> 
<a class="scriptlink" onclick="whatever"> 
0

我更喜歡的javascript:無效(0)1#,因爲它不會改變地址欄通過放置一個#(這可能會影響將來使用/更改URL的腳本)。

但是比他們兩個都好,我更喜歡讓onclick函數返回false(所以它根本不會導航),然後放置一個可以產生與點擊相同的動作的URL。例如,假設點擊鏈接將一些內容加載到'mainArea'div中。然後,URL將重新加載整個頁面,並用相同的東西填充該mainArea。這樣做的好處是,如果他們右鍵單擊URL和複製地址或在新選項卡中打開,它仍然有效。

<a href="/FullUrl" onclick="return doClick(this);" >Stuff</a> 
0

如果你想單獨標記和腳本,您也可以考慮使用事件代表團設置了事件處理程序。許多Javascript框架(例如jQuery)都帶有跨瀏覽器抽象,使其不那麼麻煩;由於NIH綜合症,我推出了my own solution

一個完整的例子看起來是這樣的:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" 
"http://www.w3.org/TR/html4/strict.dtd"> 
<html> 
<head> 
    <title>Test</title> 
    <script type="text/javascript" 
    src="http://mercurial.intuxication.org/hg/js-hacks/raw-file/tip/capture.js"> 
    </script> 
    <script type="text/javascript"> 
// un-hide elements 
document.documentElement.className = 'js'; 

// use event-delegation to capture click-events 
capture('click', '.clicky', function(event) { 
    alert(this.title); 
    return false; 
}); 
    </script> 
    <style type="text/css"> 
/* display element only if scripting is enabled */ 
.clicky { display: none; } 
.js .clicky { display: inline; } 
    </style> 
</head> 
<body> 
    <!-- link shouldn't be user-accessible; nevertheless, direct user to 
    error page --> 
    <div> 
    <a href="no-js.html" class="clicky" title="clickety-click">click me</a> 
    </div> 
</body> 
</html> 
相關問題