1

はい/いいえ入力用の2つのラジオボタンを備えたjquery-uiボタンセットを使用しています。

var yesInput = document.createElement("input");
yesInput.type = "radio";
$(yesInput).attr('id', "njs1");
$(yesInput).prop('checked', this._data);

var noInput = document.createElement("input");
noInput.type = "radio";
$(noInput).attr('id', "njs2");
$(noInput).prop('checked', !this._data);

これらのボタンと、チェックされたボタンがクリックされたかどうかを検出しようとする処理関数で、変更イベントを呼び出しています。buttonSetにされる div ですbuttonset()

$("input[type=radio]", buttonSet).change(checkHandler);

var data= $("input[type=radio]", buttonSet).eq(0).is(':checked');

このような状況で、2 番目のボタンがクリックされた場合、データは false を返すはずです。私の理解では、ラジオをチェックすると、html が追加されるように変更されcheckedます。

ただし、呼び出されているものに関係なく、 data は常にtrue.

私は何を間違っていますか?正しい値を取得するには?

編集:

フィドルの例

ご覧のとおり、[いいえ] をクリックしても、[はい] をオンのままにできます。ラジオなので、そのように動作することを期待しています

4

2 に答える 2

0

入力要素のチェック状態に変更するには、使用する必要があります.prop()

オンに設定: $( "input" ).prop( "checked", true );

オフに設定: $( "input" ).prop( "checked", false );

http://api.jquery.com/prop/

jQuery 1.6 より前で.attrは、html 属性と dom プロパティの両方が変更されていました。

v1.6 以降、この動作は変更されました。

特定の状況では、属性とプロパティの違いが重要になる場合があります。jQuery 1.6 より前では、一部の属性を取得するときに .attr() メソッドがプロパティ値を考慮に入れることがあり、一貫性のない動作を引き起こす可能性がありました。jQuery 1.6 以降、.prop() メソッドはプロパティ値を明示的に取得する方法を提供し、.attr() は属性を取得します。

アップデート

両方の無線入力は、それらをグループ化するためにまったく同じ値を持つ必要があります。

$(yesInput).attr('id', "njs1"); $(yesInput).attr('name', "toggle"); // << shared name $(noInput).attr('id', "njs2"); $(yesInput).attr('name', "toggle"); // << shared name

于 2015-10-16T15:47:52.730 に答える