2011-03-21 79 views
87

我有一個標籤<a href="#"> Previous </a> 1 2 3 4 <a href="#"> Next </a>,在某些情況下,我希望此標籤被完全禁用。從評論如何禁用JavaScript中的href鏈接?

代碼(這是如何生成的鏈接)

if (n_index != n_pages) 
    a = a+'<li><a href="#" onclick="javascript:paginateAjaxPage('+(n_index+1) +','+stype+');">></a></li><li><a href="#" onclick="javascript:paginateAjaxPage('+n_pages+','+stype+');" >>></a></li>'; 
else 
    a = a+'<li><a style="cursor: pointer;" onclick="return false;">></a></li><li><a style="cursor: pointer;" onclick="return false" >>></a></li>'; 
a = a+'</ul></div>'; 
+0

*在某些情況下,我想這個標籤是完全禁用*:這是什麼意思?什麼條件? – 2011-03-21 10:41:18

+1

通過禁用你的意思是你想讓文本仍然顯示爲鏈接(下劃線和所有內容),但點擊時什麼都不做? – 2011-03-21 10:47:30

+0

可能的重複[你如何使錨點鏈接不可點擊或禁用?](http://stackoverflow.com/questions/7654900/how-do-you-make-an-anchor-link-non-clickable-或禁用) – IsmailS 2016-04-18 08:16:58

回答

144

試試這個,當你不希望用戶在點擊

<a href="javascript: void(0)">I am a useless link</a> 
+48

'I am a shorter useless link'? – 2013-01-26 22:45:38

+13

甚至不需要分號。 – mVChr 2014-02-10 17:24:46

+26

您的網站開發人員將數百萬個標籤'\ t',換行符\\ n'和空格添加到代碼摺疊好的位置(對於誰?瀏覽器),現在正在擔心7個字節'void(0)'和/或者是神; – 2014-12-30 15:15:44

3

使用跨度和一個JavaScript的onclick來代替。如果您有鏈接和「#」href,某些瀏覽器會「跳轉」。

+0

你能舉個例子嗎? *一些瀏覽器「跳」*是真的.. :) – 2016-04-07 07:51:14

+0

很高興見到你,@ArupRakshit =)接受的答案是用'javascript:void(0);'或'javascript:;'來實現的。如果您使用Rails進行渲染,則只需在您希望禁用的地方渲染一個跨度。 – Abdo 2016-04-07 08:00:42

+0

是有意義的。謝謝 – 2016-04-07 08:36:55

15

重定向你可以簡單地給它一個空的哈希:

anchor.href = "#"; 

,或者如果這不是好就夠了「禁用」,使用事件處理程序:

anchor.href = "javascript:void(0)"; 
+20

#不推薦,爲什麼?考慮到這一點,你的禁用鏈接出現在一個冗長的頁面的底部/頁腳,點擊鏈接將帶你到頂部,「javascript :;」足夠 – Kumar 2011-03-21 10:52:30

+3

#1不會回滾到頂部 – 2013-09-10 08:38:18

+1

@Bixi,如果稍後添加,它將滾動到ID爲「1」的元素。 – ps2goat 2014-07-08 19:41:21

0

安裝jquery插件並使用它

http://plugins.jquery.com/project/jqueryenabledisable

它允許您禁用/啓用頁面中的任何字段。

如果您想在某些情況下打開頁面,請編寫一個java腳本函數並從href中調用它。如果條件滿足,你打開頁面,否則什麼都不做。

代碼如下所示:

<a href="javascript: openPage()" >Click here</a> 

and function: 
function openPage() 
{ 
if(some conditon) 
opener.document.location = "http://www.google.com"; 
} 
} 

你也可以把鏈接在一個div,並設置樣式屬性爲無的顯示性能。這將隱藏div。 例如,

<div id="divid" style="display:none"> 
<a href="Hiding Link" /> 
</div> 

這將隱藏鏈接。使用一個按鈕或圖像,使現在這個div可見通過的onclick因調用該函數:

<a href="Visible Link" onclick="showDiv()"> 

and write the js code as: 

function showDiv(){ 
document.getElememtById("divid").style.display="block"; 
} 

你也可以把一個ID標籤的HTML標籤,所以這將是

<a id="myATag" href="whatever"></a> 

並通過

document.getElementById("myATag").value="#"; 

一本得到你的JavaScript此ID必須是肯定的,哈哈

+0

謝謝大家...... – Warrior 2011-03-21 10:48:48

0

臨屋工作NK你所有...

我用下面的代碼來解決問題:

<a href="javascript:void(0)"> >>> </a> 
+1

在你去生產之前我推薦這個鏈接 - > http://stackoverflow.com/questions/3125652/javascript-vs-javascriptvoid0 – Kumar 2011-03-21 10:57:19

4

禁用鏈接的最簡單方法就是不表現出來。每當你想測試,如果你的條件符合隱藏上一頁鍵運行此功能(與你的病情替換if (true)):

var testHideNav = function() { 
    var aTags = document.getElementsByTagName('a'), 
     atl = aTags.length, 
     i; 

    for (i = 0; i < atl; i++) { 
     if (aTags[i].innerText == "Previous") { 
      if (true) { // your condition to disable previous 
       aTags[i].style.visibility = "hidden"; 
      } else { 
       aTags[i].style.visibility = "visible"; 
      } 
     } else if (aTags[i].innerText == "Next") { 
      if (false) { // your condition to disable next 
       aTags[i].style.visibility = "hidden"; 
      } else { 
       aTags[i].style.visibility = "visible"; 
      } 
     } 
    } 
}; 

然後運行testHideNav()每當你需要做的檢查,如果你的條件已發生改變。

3

這是可能的,太:

<a href="javascript:void(0)" onclick="myfunction()"> 

鏈接並不去任何地方,你的功能將被執行。

+0

請檢查現有答案 – ses 2013-09-12 00:20:30

2

因此,上述解決方案使鏈接不工作,但不要使其可見(AFAICT)該鏈接不再有效。我遇到了一系列頁面,並希望禁用指向當前頁面的鏈接(並使其明顯禁用)。

所以:

window.onload = function() { 
    var topics = document.getElementsByClassName("topics"); 
    for (var i = topics.length-1; i > -1; i--) { 
     for (var j = topics[i].childNodes.length-1; j > -1; j--) { 
      if (topics[i].childNodes[j].nodeType == 1) { 
       if (topics[i].childNodes[j].firstChild.attributes[0].nodeValue == this.n_root3) { 
        topics[i].childNodes[j].innerHTML = topics[i].childNodes[j].firstChild.innerHTML; 
       } 
      } 
     } 
    } 
} 

這走過的鏈接列表,找到指向當前頁面之一(n_root3可能是局部的事情,但我想document必須有類似的東西),和用鏈接文本內容替換鏈接。

HTH

6
anchor.href = null; 

+1

鉻試圖現在要導航到一個名爲null的頁面 – OrangeKing89 2015-07-20 14:17:03

56

可以停用一個頁面,這種風格類的所有環節:

a { 
    pointer-events:none; 
} 

當然現在的訣竅是僅停用的鏈接,當您需要,這是怎麼做的:

使用一個空的A類,像這樣:

a {} 

然後當你要停用的鏈接,這樣做:

GetStyleClass('a').pointerEvents = "none" 

    function GetStyleClass(className) 
    { 
     for (var i=0; i< document.styleSheets.length; i++) { 
      var styleSheet = document.styleSheets[i] 

      var rules = styleSheet.cssRules || styleSheet.rules 

      for (var j=0; j<rules.length; j++) { 
      var rule = rules[j] 

      if (rule.selectorText === className) { 
       return(rule.style) 
      } 
      } 
     } 

     return 0 
    } 

注:CSS規則名稱被轉換在某些瀏覽器,以降低的情況下,這種代碼是區分大小寫的,所以最好使用此

重新鏈接小寫類名稱:

GetStyleClass('a').pointerEvents = "" 

檢查此頁http://caniuse.com/pointer-events關於瀏覽器兼容性的信息

我認爲這是做到這一點的最佳方式,但令人傷心的是,IE總是不會允許它:) 我發佈這個無論如何,因爲我認爲這包含的信息,可以是有用的,因爲有些項目使用了知道的瀏覽器,就像在移動設備上使用網絡視圖一樣。

如果你只是想停用一個鏈接(我只知道這是問題),我會使用一個函數,手動設置當前頁面的URL,或不,基於該條件。 (就像你接受的解決方案)

這個問題是容易得多比我想象:)

+2

必須感謝您使用'pointer-events:none;'我從來不知道這個標籤,非常方便! – 2014-08-07 14:51:25

+3

這真是太棒了,但值得注意的是,在版本11之前IE中不支持指針事件。http://caniuse.com/#feat=pointer-events – JakeRobb 2015-04-09 18:56:23

+1

我在本頁通過編輯全局樣式嘗試了它,但是那麼我不能upvote你:) – pllee 2016-04-20 21:08:23

-4

下面爲殘疾人鏈接代碼:

<a href="javascript: void(0)">test disabled link</a> 

另一種非常簡單的解決辦法是:

<a href="#">test disabled link</a> 

第一種解決方案是高效的。

+8

請在發佈之前檢查現有答案。這些選項早在兩年前就已經提出。最好不要復活舊線程,除非響應對現有答案貢獻了某些重要*。 – Leigh 2013-06-04 17:57:12

0

另一種方法來禁用鏈接沒有HREF

element.removeAttribute('href'); 

錨標記會作出反應,禁用/純文本

<a> w/o href </a> 

,而不是<a href="#"> with href </a>

看到jsFiddel

希望這是heplful。

6

試試這個使用jQuery:

$(function() { 
    $('a.something').on("click", function (e) { 
     e.preventDefault(); 
    }); 
}); 
2

我也有類似的需求,但我的動機是爲了防止雙擊的鏈接。我做到了使用jQuery:

$(document).ready(function() { 
    $("#myLink").on('click', doSubmit); 
}); 

var doSubmit = function() { 
    $("#myLink").off('click'); 
    // do things here 
}; 

的HTML看起來像這樣:

<a href='javascript: void(0);' id="myLink">click here</a> 
0

而不是無效,你也可以使用:

<a href="javascript:;">this link is disabled</a> 
4
(function ($) { 
    $(window).load(function() { 
     $('.navbar a').unbind('click'); 
     $('.navbar a').click(function() { 
      //DO SOMETHING 
      return false; 
     }); 
    }); 
})(jQuery); 

我覺得這種方式更容易實行。它有你的優勢。不在你的html裏面,而是在一個不同的文件中。我認爲,沒有解綁。這兩件事仍然活躍。不確定。但在某種程度上,您只需要這一個事件

+1

'unbind'是否必要?我相信'return false'或'e.preventDefault()'就足夠了。 – 2014-09-24 15:27:20

+0

請解釋OP的代碼有什麼問題,以及爲什麼通過編輯答案*來解決問題。 – 2014-09-24 16:16:46

0

這是我如何禁用上點擊

$('.one-click').on("click", function (e) { 
    $(this).addClass('disabled'); 
}); 

其中.disabled類的形式來引導。

Qupte形式引導網站(here

鏈接功能警告

的.disabled類使用指針事件:沒有嘗試禁用S的鏈路功能,但CSS屬性不但標準化。另外,即使在支持指針事件的瀏覽器中:無,鍵盤導航仍然不受影響,這意味着有視力的鍵盤用戶和輔助技術用戶仍然可以激活這些鏈接。爲了安全起見,在這些鏈接上添加一個tabindex =「 - 1」屬性(以防止它們接收鍵盤焦點)並使用自定義JavaScript來禁用它們的功能。

0

我一直在尋找簡單的東西,所以我上面的答案(提示這樣的:javascript: void(0);)合併成一個jQuery .attr(),就像這樣:

$("a").attr("href", "javascript: void(0);");