2012-01-30 70 views
40

使用jquery我該如何檢查它是否只讀?如何檢查下拉菜單是否被禁用?

這就是我想..

$("#item").keydown(function (event) { 
    //alert(event.keyCode); 
    if (event.keyCode == 13) { 
     $("#ok").click();    
     if ($('#dropLength').prop("disabled") == false) { 
      $("#dropLength").focus(); 
      return; 
     } 
     if ($('#dropUnit').prop("disabled") == false) { 
      $("#dropUnit").focus(); 
      return; 
     } 
     $("#qty").focus();     
     return ; 
    } 
}); 

的下拉菜單設置使用jQuery也爲只讀:

if ($('#dropLength').find('option').length <= 1) { 
     $('#dropLength').attr("disabled", "disabled"); 
} 
if ($('#dropUnit').find('option').length <= 1) { 
     $('#dropUnit').attr("disabled", "disabled"); 
} 
+0

通過只讀您的意思是禁用? – 2012-01-30 10:53:53

+0

請注意,HTML定義了兩個相關但不同的屬性:'readonly'和'disabled'。 – 2012-01-30 10:57:01

回答

81

的傳統解決方案,1.6之前,將使用.attr並將返回的值作爲bool處理。主要問題是返回的類型.attr已更改爲string,因此與== true的比較被破壞(請參閱http://jsfiddle.net/2vene/1/(並切換jquery版本))。

隨着1.6 .prop被引入,它返回一個bool

不過,我建議使用.is(),作爲返回類型爲本質bool,如:

$('#dropUnit').is(':disabled'); 
$('#dropUnit').is(':enabled'); 

此外.is()是更自然的(在「自然語言」的條款),並增加多了一個條件簡單的屬性比較(例如:.is(':last'),.is(':visible'),...請參閱documentation on selectors)。

+0

此答案有錯誤和誤導性的信息。使用JQuery 1.6+的'('#dropLength')。prop(「disabled」)== false'是完全正確的。它工作得很好。@Andreas將'$('#dropLength')。attr(「disabled」)'(它不會返回'false/true')與'$('#dropLength')。prop(「disabled」)混淆。將返回'false/true')。使用'$('#dropLength')。prop(「disabled」)作爲布爾值是完全安全的。 http://jsfiddle.net/nsnomatz/ – 2015-01-13 08:30:18

+0

@DougS我絕對不會將'.prop'與'.attr'混淆,因爲我對'.attr'的用法是在porpuse上,並且在小提琴中是顯式的。正如我在我的回答中提到的那樣:返回的類型'.attr'已經更改爲'string'(因爲屬性的值是一個字符串),許多遺留實現依賴於'.attr'(如'.prop '用1.6引入)返回一個'bool'。這也是爲什麼我永遠不會用'.attr'或'.prop'進行顯式檢查,而是用適當的僞類來執行'.is'的原因。 – 2015-01-13 09:24:28

+0

你會混淆讀過你的答案的人,並認爲'道具'壞了。它沒有壞掉!它工作得很好。原來的問題甚至不使用你所指的代碼。他正確使用'prop'。而且現在你已經在你的評論中澄清說你更願意使用'is'以防萬一'prop'將來停止工作。修復你的答案,讓人們知道'prop'沒有被破壞,並且作爲布爾值工作得很好。 – 2015-01-14 08:47:36

-3

這是$(#dropUnit).attr("disabled") == false

+2

- ,而不是xhtml有效,並且從1.7.1開始,如果disabled =「disabled」,這個用法就被打破了......「btw選擇器無效! – 2012-01-30 10:58:24

+0

請參閱http://jsfiddle.net/2vene/1/(並切換jquery版本) – 2012-01-30 11:10:19

+3

正確! upvoted你的答案和評論。 – Mike 2012-01-30 11:10:48

5

嘗試以下或檢查演示disabledreadonly

$('#dropUnit').is(':disabled') //Returns bool 
$('#dropUnit').attr('readonly') == "readonly" //If Condition 

您可以檢查jQuery FAQ

1

有兩種選擇:

首先

您還可以,如果屬性值是使用像is()

$('#dropDownId').is(':disabled'); 

使用== true通過檢查10。 attr()

$('#dropDownId').attr('disabled'); 

任何你覺得比較適合你,你可以用:)

乾杯!

+1

請勿使用'== true'或'==假' - 用法大約被打破了1.6!看到我的答案和測試鏈接! – 2012-01-30 11:14:56

+0

@Manish這隻能用於禁用?我用它來檢查啓用,它失敗了! – hima 2013-09-12 15:31:59

+1

忽略Andreas上面的評論。這部分不正確。他將'attr('disabled')'與'prop('disabled')'混淆了。使用'prop('disabled')'作爲布爾值就可以。 – 2015-01-13 08:32:56