2016-06-29 11 views
1

での作業がチェック、以下のコンソール出力を検査第一の入力が属性を確認しており、選択されていることに注意してください:はjQueryの:初期(HTML属性)ラジオ入力

enter image description here

あなたは、私は2を持って見ることができますラジオinput s、1はcheckedですが、セレクタもpropでもisでもありません。ラジオの1つを手動でクリックすると、コードが正しく機能します。ここに私のHTMLがあります:

<div class="col-sm-6"> 
    Type: 
    <div class="btn-group" data-toggle="buttons"> 
     <label class="btn btn-default active"> 
      <input type="radio" name="generator-type" id="opt-type-passphrase" value="0" autocomplete="off" checked> 
      Passphrase 
     </label> 
     <label class="btn btn-default"> 
      <input type="radio" name="generator-type" id="opt-type-password" value="1" autocomplete="off"> 
      Password 
     </label> 
    </div> 
</div> 

私はラジオをクリックしていないときにページが読み込まれるときにコードが機能しないのはなぜですか?それを修正する方法はありますか?

EDIT:問題を見つけ、私は、ページの読み込みにこのコードを持っている:

 $("input[name='generator-type'][value=" + this.Options.Type + "]").prop("checked", ""); 

正しい解が使用している:

.prop("checked", true) 

をしかし、誰もが、それはどのように機能するかを説明してくださいできますか?なぜchecked属性がありますが、propの機能はまだfalseですか?

+0

@HectorBarbossaありがとう、私は問題の原因を見つけましたが、まだ 'prop'と' is'がどのように動作しているのかまだ分かりません。あなたはそれを説明できますか? –

+1

動作方法に関するご質問は、[ドキュメント](http://api.jquery.com/prop/)に記載されています。把握する重要な側面:HTML属性は、プロパティの*初期値のみを設定します。コードまたはユーザー操作を介して変更された場合、HTMLは変更されませんが、プロパティは変更されます。 –

答えて

1

あなたはこの

$(...).is(':checked') 

なぜようにチェックする必要がありますか? jquery isメソッドは、現在一致している要素をフィルタリングするために使用するcssセレクタを受け入れるためです。

したがって、の要素にcheckedタグがある場合にのみ、temp.is('checked')が真となります。あなたの場合、彼らはinputタグを持っているので、一致しません。

現在の要素がチェックされているかどうかについて、CSS疑似セレクタで一致するものを使用します(:checked)。これはあなたが望むものです。

$(...).is('[checked]')を使用すると、一致する要素の属性がcheckedの場合はtrueを返します。それはおそらく元々やっていたことでしょう。しかし、従来の方法は:checkedを使用することです。

+0

良いキャッチ。更新しました。 – asemahle

3

.is('checked')の代わりにを試してください。これを確認してくださいFiddle

1

あなたは、チェックされているコードでコロン行方不明:

temp.is(":checked") 

代わりの

temp.is("checked") 
+0

これは既存の回答とどう違うのですか? –