2008-10-06 219 views
6

考慮下面的代碼:禁用錨/ Safari瀏覽器

$("a").attr("disabled", "disabled"); 

在IE和FF,這將使錨無法點擊,但在基於WebKit的瀏覽器(谷歌Chrome和Safari)這個什麼也不做。關於disabled屬性的好處在於它很容易被刪除,並且不會影響href和onclick屬性。

你有關於如何得到期望的結果的任何建議。答案必須是:

  • 很容易恢復,因爲我想在運行AJAX調用時禁用表單輸入控件。
  • 必須在IE,FF,和WebKit

回答

7

工作,我假設你已經綁定到這些錨元素的onclick事件處理程序。只需讓您的事件處理程序檢查「已禁用」屬性,並在已設置的情況下取消該事件。您的事件處理程序看起來像這樣:

$("a").click(function(event){ 
    if (this.disabled) { 
    event.preventDefault(); 
    } else { 
    // make your AJAX call or whatever else you want 
    } 
}); 

您還可以設置樣式表規則來更改光標。

a[disabled=disabled] { cursor: wait; } 

編輯 - 按照評論中的建議簡化了「禁用」檢查。

+0

功能diableForms(){ $( 「輸入按鈕,文本區域,一」)。 attr(「disabled」,「disabled」)。css(「cursor」,「wait」); (「input」,「button」,textarea,a「)。not(」。disabled「)。removeAttr(」disabled「)。css(」cursor「,」「); } – 2008-10-06 18:22:47

+0

我剛剛粘貼我使用的是disableForms和enableForms功能。感謝您的建議。 – 2008-10-06 18:24:30

2

我不得不修正了網站上的這個行爲有很多錨,正在啓用了根據其他條件這個屬性/殘疾人等也許並不理想,但在那樣的情況下,如果你不喜歡單獨解決每個錨的代碼,這樣就可以了所有的主播:

$('a').each(function() { 
    $(this).click(function (e) { 
     if ($(this).attr('disabled')) { 
      e.preventDefault(); 
      e.stopImmediatePropagation(); 
     } 
    }); 
    var events = $._data ? $._data(this, 'events') : $(this).data('events'); 
    events.click.splice(0, 0, events.click.pop()); 
}); 

和:

a[disabled] { 
    color: gray; 
    text-decoration: none; 
}