2011-12-07 4 views
1

ラベルをクリックしたときにラジオボタンの状態を変更する代わりにforを実行してjQueryを使用しています。ラジオボタンには別のイベントが付いています。そこでは、チェックされているラジオボタンの数を数えます。jQueryトリガを増分するラジオ:-1のオフセットで長さを確認

$('label').click(function(){ 
    $(this).prev('input:radio').trigger('click'); 
}); 

$('input[type=radio]').click(function(){ 
    console.log($('input[type=radio]:checked').length); 
}); 

lengthのコンソールログが第二のようにクリックし、されている場合、その後、最初のラジオがクリックされたときに10です...

私は何をしないのです!

おかげ

答えて

1

ではなくchangeイベントを使用してください。

$('label').click(function(){ 
    $(this).prev('input:radio').trigger('click'); 
}); 

$('input[type=radio]').change(function(){ 
    console.log($('input[type=radio]:checked').length); 
}); 

あなただけのこの操作を行うことができるとき、私はラベルのためのjQueryを使用していないだろうけど。

<label><input type="radio" name="group">click me</label> 
+0

これは、同じjを実行する約30ページの更新です。だから、もし私がちょうど各ページのHTMLを編集するのではなく、JavaScriptでそれを行うなら、それは1時間か2時間を節約します。ありがとう。これはうまくいった。 –

+0

@TimJoyce:ああ、分かった。それがうれしかった。 – RightSaidFred

1

ラジオボタンのチェック状態のみ後クリックハンドラが戻る変更されます。

ハンドラがコントロールのデフォルト動作を禁止するためにfalseを返すか、をコールする可能性があるため、これが必要です。ハンドラが返される前にチェックされた状態が変更された場合、既定の動作を禁止することは不可能です(既に行われているように)。

あなたはハンドラが戻った後console.log()に通話をスケジュールする0遅延でwindow.setTimeout()を使用することができます。

$("input[type=radio]").click(function() { 
    window.setTimeout(function() { 
     console.log($("input[type=radio]:checked").length); 
    }, 0); 
}); 
+0

ありがとうございます。あなたの説明にはもっと意味がありました。私は@RightSaidFredの答えを使うつもりです。なぜなら、それは簡単だし、うまくいくからです。しかし、詳細を感謝します。 –

0

clickは、単にUIのアクションです。あなたのラジオ入力で扱うべきイベントはchangeです。

関連する問題