2012-01-30 8 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

読み取り専用で無効になっていますか? –

+0

HTMLは関連しているが異なっている、 'readonly'と' disabled'という2つの属性を定義しています。 –

答えて

81

レガシー・ソリューションです、 .attrを使用し、戻り値をboolとして処理することでした。主な問題は、返された型の.attrstringに変更されたため、== trueとの比較が壊れていることです(http://jsfiddle.net/2vene/1/(およびjquery-versionを切り替えてください))。

1.6 .propが導入され、boolを返します。

返される型は本質的にbool、のようにされてそれにもかかわらず、私は、.is()を使用することをお勧め:

$('#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')。 'false/true'を返します)。 '$( '#dropLength').pro(" disabled ")'をブール値として使うことは完全に安全です。 http://jsfiddle.net/nsnomatz/ –

+0

@DougS '.prop'と' .attr'を混同することは絶対にありません。私の '.attr'の使い方はporpuseにあり、フィドルでは明示的です。私の答えで言及したように、 '.attr'の返される型は' string'に変更されました(属性の値は文字列です)。多くの従来の実装は '.attr'に依存します(' .prop '1.6で導入されました)' bool'を返しました。これは、 '.attr'や' .prop'で明示的にチェックするのではなく、適切な疑似クラスで '.is'を実行する理由です。 –

+0

あなたはあなたの答えを読んで、「小道具」が壊れていると思う人々から地獄を混同するつもりです。それは壊れていない!それはうまく動作します。元の質問はあなたが参照しているコードを使用していません。彼は 'prop'を正しく使用しています。そして今、 'prop'が将来動作しなくなった場合に' is'を使用する方が好きだというコメントを明確にしました。あなたの答えを修正して、 'prop'が壊れていないことを知って、真偽値として動作します。 –

-3

それは1.6の前に、$(#dropUnit).attr("disabled") == false

+2

- 有効なxhtmlではなく、1.7.1以降、 'disabled =" disabled "' ... btw selectorが無効な場合、この使用法は壊れています! –

+0

http://jsfiddle.net/2vene/1/(そしてjquery-versionを切り替えてください) –

+3

が正しい!あなたの答えとコメントの両方をupvoted。 – Mike

5

試してみてくださいまたはチェックデモdisabledreadonly

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

あなたはjQuery FAQを確認することができます。

1

2つのオプションがあります:あなたはまた、属性値がであるかどうかをチェックすることによってis()== trueを使用して

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

セカンド

のように使用することができます

まず

は、 10。あなたが感じるものは何でもattr()

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

がより良いフィットは、使用することができます:)

乾杯を!

+1

'== true'を使用しないでください。 '== false' - 使い方は約1.6で壊れています!私の答えとテストのリンクを見てください! –

+0

@Manishこれは無効にしか使用できませんか?私はそれを有効にするためにそれを使用し、それは失敗する! – hima

+1

上記のAndreasのコメントは無視してください。部分的に間違っています。彼は 'attr( 'disabled')'と 'prop( 'disabled')'を混同しています。 booleanとして 'prop( 'disabled')'を使うとうまくいきます。 –

関連する問題