2017-01-02 15 views
1

私は非常に不慣れなjQueryプログラマーで、わかりやすいスクリプトでバグを見つけることができません。助けてもらえますか?jQueryの.data()はブール値を返しません。どうして?

状態が初期値と異なる場合は、チェックボックスを強調したいと思います。その初期値はdata-init属性として格納されます。ここでは受け入れ答えで

<td><input checked data-init id="controls-0-modeU" name="controls-0-modeU" type="checkbox" value="y"></td> 

<td><input id="controls-1-modeU" name="controls-1-modeU" type="checkbox" value="y"></td> 

Retrieve boolean data from data attribute in jqueryがあります:「jQueryの.data()方法は、ブールと数値を認識についてスマートですし、彼らのネイティブ型に変換してチェックし、未チェックの入力のために生成されたHTMLは次のようになります "。それが私が望むものです。

私のスクリプトはで始まる:

$(document).ready(function(){ 
     $("td input:checkbox").change(function(){ 
      var $init = $(this).data("init") 

しかし$initの値が(最初は未確認の入力用)undefinedまたは空の文字列(最初にチェックするため)のいずれかです。どちらも偽と評価されます。代わりに真実/偽になっていないのはなぜですか?

+2

自分自身を持ち上げ重いを行う必要があるでしょうチェックボックスに「data-init」属性がありません... –

+0

と複数のチェックボックスがあり、コードが不完全です。 – Riddler

+0

あなたの 'data-init'には値がありませんでした。 'checked'チェックボックスの空の属性ですか?あなたは何を達成したいですか? –

答えて

3

(チェックのように、読み取り専用、など)ので、あなたはそれを与える必要があります値

<td><input checked data-init="true" id="controls-0-modeU" name="controls-0-modeU" type="checkbox" value="y"></td> 

<td><input data-init="false" id="controls-1-modeU" name="controls-1-modeU" type="checkbox" value="y"></td> 

あなたがアップし、あなたのマークを維持したい場合は、

var $init = $(this).is("[data-init]"); 
0

要素がそうのような属性を持っているかどうかをチェックすることができます:

データ属性はjQueryのでブール属性と同じように扱われていない
if (!!$(this).attr("data-init")) { 
    // its there 
} 
else { 
    // its not 
} 
+0

'!!'しかし、なぜですか?それにもかかわらず、彼の属性は実際には空で、ブール値 – empiric

+0

を含んでいません。欠落している属性が 'undefined'または' false'を返す可能性があるためです。この方法で両方を "偽の"値として捕まえることができます –

+0

それはOPが特に結びついた答えを念頭に置いて望んでいるものです。彼は彼が得た価値をチェックすることを求めているのではなく、なぜ彼が期待値を得ていないのか – empiric

関連する問題