何もチェックされないようにjQueryでラジオボタンをリセットする方法


136

次のようなHTMLのラジオボタンがあります。

<td>
    <input id="radio1" type="radio" name="correctAnswer" value="1">1</input>
    <input id="radio2" type="radio" name="correctAnswer" value="2">2</input>
    <input id="radio3" type="radio" name="correctAnswer" value="3">3</input>
    <input id="radio4" type="radio" name="correctAnswer" value="4">4</input>
</td>

これはフォームタグ内にあり、ユーザーがフォームを送信すると、すべてのラジオボタンがデフォルトに戻ります。それらのどれもチェックされなかったことを意味します。

私はこのコードを持っていますが、それは言ってエラーを出します [0] is null or not an object

$('input[@name="correctAnswer"]')[0].checked = false;
$('input[@name="correctAnswer"]')[1].checked = false;
$('input[@name="correctAnswer"]')[2].checked = false;
$('input[@name="correctAnswer"]')[3].checked = false;

IE 6でこれを行っています。


@lambacckの回答が機能しない場合は、JQueryサイトのバグトラッカー[ bugs.jquery.com/ticket/10910]を参照してください。(私がそうであったように)一連のラジオボタンをループしてすべてをデフォルト値にリセット#(selector).prop('checked',true);しようとすると、同じグループ内の後続のラジオボタンを未チェックのステータスに設定しようとすると失敗します。トリックは、ラジオボタンをチェックされた状態のみ設定し、ラジオボタングループにその機能を実行させる(他のチェックを外す...)ことです。また、呼び出しは$(selector).click();機能し、関連イベントを発生させます。
Cos Callis 2012年

回答:


270

1.6より前のバージョンのjQueryでは、以下を使用します。

$('input[name="correctAnswer"]').attr('checked', false);

1.6以降のバージョンのjQueryでは、以下を使用する必要があります。

$('input[name="correctAnswer"]').prop('checked', false);

ただし、1.6.1以降を使用している場合は、最初の形式を使用できます(下記の注2を参照)。

1:2 番目の引数があることが重要である偽のではなく、「偽」以来、「偽」 falsy値ではありません。すなわち

if ("false") {
    alert("Truthy value. You will see an alert");
}

注2: jQueryの1.6.0の時点で、そこに2つの類似の方法が今ある、.attrそして.propそれは、二つの関連するが、わずかに異なることを行います。この特定のケースで1.6.1以降を使用している場合、上記のアドバイスが機能します。上記は1.6.0では機能しません。1.6.0を使用している場合は、アップグレードする必要があります。詳細が必要な場合は、読み続けてください。

詳細:ストレートHTML DOM要素を使用する場合、DOM要素(に取り付けられた特性がありcheckedtypevalueHTMLページの走行状態へのインタフェースを提供する、など)。HTMLで提供されるHTML属性値へのアクセスを提供する.getAttribute/ .setAttributeインターフェースもあります。1.6以前では、jQueryは.attr、両方のタイプの値にアクセスするための1つのメソッドを提供することにより、区別を曖昧にしました。jQueryの1.6+は、2つのメソッドを提供し、.attrそして.propこれらの状況を区別取得します。

.propDOM要素にプロパティを設定.attrでき、HTML属性値を設定できます。プレーンDOMで作業していて、checkedプロパティをに設定した場合elem.checkedtrueまたはfalse実行中の値(ユーザーに表示される値)を変更すると、返される値はページの状態を追跡します。elem.getAttribute('checked')ただし、初期状態のみを返します(HTMLからの初期状態に応じて、'checked'またはそれにundefined応じて)。1.6.1 以降では、.attr('checked', false)両方elem.removeAttribute('checked')を使用elem.checked = falseすると変更が行われ、変更により多くの下位互換性の問題が発生したため、HTML属性とDOMプロパティのどちらを設定したかがわかりません。.propドキュメントで詳細を参照してください。


2番目の引数には「false」ではなくfalseを渡すことが重要です。
Casebash

2番目の引数は設定する値であるため、2番目の引数の「false」は重要です。2番目の引数が空の場合は、セレクターに一致する最初の要素の値を取得することを意味します。
lambacck 2010

1
@Noldorin-「Truthy」は完全に語彙です。(「真実」の概念を表現するより良い方法を提案できますか?1つの単語のみを使用しますか?)
nnnnnn

ええ、おそらく十分に公平です。私は個人的には、より正式な「真実」または「意味的に真実」でさえ好んだと思いますが、おそらくその点はおそらく正しいでしょう。
Noldorin 2012年

3
@Noldorin "Truthy"および "falsy"は、Brendan EichDouglass Crockfordなど、多くのJavascript専門家が使用する用語です。ブール評価は6つの偽の値によって定義されるため、重要な用語は偽です。Truthyは、偽りの反対の論理名です。falsyの使用は、これが慣れていない可能性があると思わせるために意図的に使用されたと思います(0がfalseである他のCスタイルの構文言語の場合は特に)。
lambacck 2012年

53

jqueryでラジオボタンの状態を設定する最良の方法:

HTML:

<input type="radio" name="color" value="orange" /> Orange 
<input type="radio" name="color" value="pink" /> Pink 
<input type="radio" name="color" value="black" /> Black
<input type="radio" name="color" value="pinkish purple" /> Pinkish Purple

1つのボタンを事前に選択するjquery(1.4以降)コード:

var presetValue = "black";
$("[name=color]").filter("[value='"+presetValue+"']").attr("checked","checked");

Jquery 1.6以降のコードでは、.prop()メソッドが推奨されます。

var presetValue = "black";
$("[name=color]").filter("[value='"+presetValue+"']").prop("checked",true);

ボタンの選択を解除するには:

$("[name=color]").removeAttr("checked");

10

あなたの問題は、属性セレクタがで始まっていないこと@です。

これを試して:

$('input[name="correctAnswer"]').attr('checked', false);

4
$('#radio1').removeAttr('checked');
$('#radio2').removeAttr('checked');
$('#radio3').removeAttr('checked');
$('#radio4').removeAttr('checked');

Or

$('input[name="correctAnswer"]').removeAttr('checked');

4

最後に多くのテストを行った後、プリセットする最も便利で効率的な方法は次のとおりです。

var presetValue = "black";
$("input[name=correctAnswer]").filter("[value=" + presetValue + "]").prop("checked",true);
$("input[name=correctAnswer]").button( "refresh" );//JQuery UI only

JQueryUIオブジェクトでは更新が必要です。

値の取得は簡単です:

alert($('input[name=correctAnswer]:checked').val())

JQuery 1.6.1、JQuery UI 1.8でテスト済み。


2

これは古く、少し外れたトピックであることはわかっていますが、コレクション内の特定のラジオボタンのみをオフにしたいとします。

$("#go").click(function(){
    $("input[name='correctAnswer']").each(function(){
      if($(this).val() !== "1"){
        $(this).prop("checked",false);
      }
    });
  });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<input id="radio1" type="radio" name="correctAnswer" value="1">1</input>
<input id="radio2" type="radio" name="correctAnswer" value="2">2</input>
<input id="radio3" type="radio" name="correctAnswer" value="3">3</input>
<input id="radio4" type="radio" name="correctAnswer" value="4">4</input>
<input type="button" id="go" value="go">

また、ラジオボタンリストを処理している場合は、:checkedセレクターを使用して、必要なものだけを取得できます。

$("#go").click(function(){
  $("input[name='correctAnswer']:checked").prop("checked",false);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<input id="radio1" type="radio" name="correctAnswer" value="1">1</input>
<input id="radio2" type="radio" name="correctAnswer" value="2">2</input>
<input id="radio3" type="radio" name="correctAnswer" value="3">3</input>
<input id="radio4" type="radio" name="correctAnswer" value="4">4</input>
<input type="button" id="go" value="go">

0

jqueryを通じてチェックされるラジオボタンセット:

<div id="somediv" >
 <input type="radio" name="enddate" value="1"  />
 <input type="radio" name="enddate" value="2"  />
 <input type="radio" name="enddate" value="3"  />
</div>

jqueryコード:

$('div#somediv input:radio:nth(0)').attr("checked","checked");

0

DOMのすべてのラジオボタンをクリアする場合:

$('input[type=radio]').prop('checked',false);


0
<div id="radio">
<input type="radio" id="radio1" name="radio"/><label for="radio1">Bar Chart</label>
<input type="radio" id="radio2" name="radio"/><label for="radio2">Pie Chart</label>
<input type="radio" id="radio3" name="radio"/><label for="radio3">Datapoint Chart</label>
</div>

$('#radio input').removeAttr('checked');
// Refresh the jQuery UI buttonset.                  
$( "#radio" ).buttonset('refresh');

0

小道具はチェック状態を変更しましたが、変更はフォームにもそれを示しています。

$('input[name="correctAnswer"]').prop('checked', false).change();

-1

あなたが持っている場所: <input type="radio" name="enddate" value="1" />

value = "1"の後に追加することもできます unchecked =" false" />

行は次のようになります。

<input type="radio" name="enddate" value="1" unchecked =" false" />

1
ねえあなたはあなたの答えを不完全に残したと思います。
アマー

-2

すべてのラジオボタンをデフォルトに戻します。

$("input[name='correctAnswer']").checkboxradio( "refresh" );

関数checkboxradio()はjQuery 2.xでは定義されていません。これはあなたが使っていた拡張機能でしたか?
justdan23

-3

なぜしないのですか:

$("#radio1, #radio2, #radio3, #radio4").checked = false;

1
jQuery呼び出しから返された配列にcheckedプロパティを設定するだけでなく、attr()関数を使用して配列内のアイテムにそのプロパティを設定する必要があります。
bdukes

これは、「チェックされていない」状態ではありません
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.