2011-01-15 6 views
2

これは、div要素をクリックしてラジオボタン要素を更新するというものです。 例えば、3つのdivがあり、各divの中に1つのラジオボックスがあります。Jqueryの別の要素によってトリガされたラジオボックスの状態を調べる方法は?

divをクリックすると、ラジオボックスにチェックされますが、この方法の.change()イベントは機能しません。

特定のラジオボックスが紛失したときに私が知っている結果はどのように得られますか:ステータスを確認しましたか?

$('#payment_method_cards, #payment_method_ibank_swe, #payment_method_bp').click(function(){ 
    $(this).children('input[name="payment_method"]').attr('checked','checked'); 
    $('input[name="payment_method"]').change(function(){ 
     if($(this).val() == 'bp'){ 
      alert("Thats the one"); 
     } 
    } 
}); 

私はdiv要素にするときラジオボックス内をクリックしたがされていない場合にのみトリガラジオボックスの変更:ここで

は私が現在持っているコードです。

+1

a)イベントハンドラをイベントにバインドし、b)イベントを実行することの違いを理解しておく必要があります。上記のコードでは、a)を実行していて、changeイベントハンドラをchangeイベントにバインドしています。あなたがしたいことは、それを束縛するのではなく、変更イベントを引き起こすことです。変更イベントのバインディングは、クリックハンドラ内ではなく、ページロード時に発生する必要があります。 –

答えて

1

DIVの代わりにラベルを使用:

<label> <input type="radio" value="1"> Male </label> 

上記の例では、単語「Male」をクリックすると、変更イベントがトリガーされます。


ラベルを使用することをお勧めしますが、DIVを使用することを強くお勧めする場合は、このコードを使用してください。変更イベントは、ラジオボックスが事前にチェックされていない場合にのみトリガされます。

$('#payment_method_cards, ...').click(function(){ 
    var radio = $(this).children('input[name="payment_method"]'); 

    if (!radio[0].checked) { 
     radio.attr('checked', true).change(); 
    } 
}); 
+0

私のコードのさまざまな部分について貴重な説明をいただきありがとうございます。 – arma

3

clickをトリガーするdivに関連付けられたイベントハンドラーがあるか、checked属性が追加されているとします。ラジオボタンの状態を変更した後に手動でchange()機能を手動で起動しないでください。

$("#check-me").bind("click", function() { 
    $("#radio-btn1").click().change(); 
    // change radio button state, then trigger 'change' event. 
}); 

更新:あなたが外changeハンドラを定義する必要があり

$('#payment_method_cards, #payment_method_ibank_swe, #payment_method_bp').click(function(){ 
    var $radio = $(this).children('input[name="payment_method"]'); 
    if (!$radio.is(":checked")) { 
     $radio.attr('checked','checked').change(); 
    } 
}); 

:あなたが提供するコードで、あなたは、この(はOPからコメントすることにより、再びを更新)のような何かをするだろうclickハンドラー:

$('input[name="payment_method"]').change(function(){ 
    if($(this).val() == 'bp'){ 
     alert("Thats the one"); 
    } 
}  
+1

簡体字: '.attr( 'checked'、true)' –

+0

感謝しています。あなたが手動チェンジャーとして.change()を使用できることを知りませんでした:)問題はただちにそのdivをクリックするたびに、 。完璧に私はラジオボックスがチェックされて初めて警告することを望むでしょう。その後、チェックされたステータスが失われ、再度取得された場合は、再度アラートが表示されます。 – arma

+0

@armaあなたの質問に答えました –

関連する問題