2011-07-05 113 views
6

我試圖禁用按鈕 - 使用jQuery 1.4.4在IE禁用IE6,IE7,IE8中的按鈕?

jQuery('#id').attr("disabled", true);

下面的代碼隨着

<button id="id" type="button" 
    class="some-class" 
    disabled="">Comment</button> 

在FF,鉻等,當然還有HTML,在IE中不起作用?我該如何解決?

<button disabled="disabled">似乎不工作在IE或?

編輯:還注意<button id='id' disabled>foobar</button>是有效的HTML

+3

+1「當然」 – 2011-07-05 15:36:17

+0

@WTP :) - IE只是愛* PI#$&*納克關閉您 – Tom

+1

天@湯姆:我知道你的感受。如果你看到雷德蒙在新聞中着火,給我打電話 - 我會去拿一些汽油。 – Bojangles

回答

16

XML/HTML屬性值都是字符串。值「真」和「假」have no special meaning (technically, they aren't even allowed)。該公約是設置值的屬性名稱:

jQuery('#id').attr("disabled", "disabled"); 

還要注意,在你的HTML,<button disabled="">就已經禁用按鈕。用jQuery就離開了disabled屬性或重新啓用它:

jQuery('#id').removeAttr("disabled"); 
+0

對不起,但這是不對的。當你試圖在JQuery中檢查一個複選框時,它的工作的唯一方法是使用$(「input [type = checkbox]」)。attr(「checked」,true); –

+0

@philhag - 它只是我或做了嗎?'實際上禁用IE中的按鈕? http://jsfiddle.net/kxVRx/9/ – Tom

+0

@Laam Baily這個行爲在HTML5標準中是固定的,所以我不確定它是不是正確的。無論如何,'$(「input [type = checkbox]」)。attr(「checked」,「checked」);'[* does * work](http://phihag.de/2011/so/jquery-checked。 HTML)。 – phihag

0

嘗試:

jQuery('#id').attr("disabled", "disabled"); 

屬性值應該是字符串,而不是布爾

+0

他想禁用,不啓用按鈕 –

+0

@alex - 我想禁用IE中的按鈕 - 問題是,IE似乎不喜歡上面的代碼?即用戶可以點擊並且不會禁用按鈕? – Tom

+0

D'oh再次。我今天一直這樣做。編輯 – Alex

0

只是一些額外的增值此處發佈的答案。

我認爲你的措辭有點不合適,而且從外觀上看,你想知道如何禁用和重新啓用按鈕跨瀏覽器。

disabled屬性(如果存在)應始終禁用該元素,而不管其值是什麼。建議值爲disabled="disabled"

$('#id').attr("disabled", "disabled") 

爲了重新啓用你要完全消除disabled attrbitute(在其他的答案中指出)的元素。

$('#id').removeAttr('disabled'); 
1

我在IE8中遇到了同樣的問題,並且能夠解決它們,所以我認爲我會加入一些點。 phihag提供的解決方案是正確的和錯誤的。確實,XML/HTML不會接受真正的布爾值作爲屬性 - 但我們正在討論jQuery語法,在這裏,它接受布爾值作爲參數,並適當地設置屬性。

隨着禁用和啓用輸入元件,在IE中,我發現了什麼工作,始終如一地,是簡單地不「硬編碼」的初始期望直接在X/HTML值。如果要從初始渲染中禁用控件,最好在頁面呈現後立即調用函數,以禁用它。也許有點混亂,像許多事情一樣,它不應該是那樣,但那就是最終爲我工作的東西。很簡單。

希望能幫助別人。我經歷了很多調試工作,以確定這一點。

0

這是JQuery API documentation

$(".selector").button("option", "disabled", true); 

它爲我的作品,即使在IE 8中使用jQuery UI 1.8.14或更高。在舊版本中,即使在禁用的按鈕上也會觸發點擊事件。因此,在事件中,你必須評估該按鈕的disabledness和取消事件:

function clickHandler(event) { 
    if ($(event.currentTarget).button("option", "disabled")) { 
     return false; 
    } 
    // other handle stuff... 
}