2012-01-24 13 views
0

ラジオボタンのセットが選択されているかどうかを確認しようとしています。しかし、事実の後でラジオが選択されても更新されないようです。jQuery .each()が更新されない

コード:

$('button#submit').click(function() { 
    var addr_chkd = 0; 
    $('input:radio[name="address"]').each(function() { 
     if (!$(this).attr('checked')) 
      addr_chkd++ 
    }); 
}); 

if (addr_chkd) 
    // do something 

ボタンがクリックされると、何も選択されていない場合、コードは素晴らしい作品。ただし、ラジオボタンが選択され、ボタンがクリックされると、addr_chkdは依然として0より大きい値を返します。

[UPDATE]

問題は、私がゼロより大きいaddr_chkdをチェックしてるということです。 addr_chkdがラジオボタンの長さと等しいかどうかを確認する必要があります。私は@ PPvGの答えに若干の変更を加え、それはトリックでした。

$('button#submit').click(function() { 
    var radios = $('input:radio[name="address"]'); 
    var num_unchecked = radios.filter(':not(:checked)').length; 
    if (num_unchecked === radios.length) { 
     alert('please select a button'); 
    } 
}); 
+2

なぜそれは0より大きくないでしょうか? 1つのラジオボタンだけが正しいかチェックされますか?つまり、チェックされていないラジオボタンごとにカウンタが増加します。コードで何をしたいのですか? –

+0

少なくとも1つのラジオボタンがチェックされていることを確認します。私のロジックが故障している可能性がありますが、これは動作していませんが、addr_chkd> 0の場合、ボタンはチェックされていません。 – RHPT

答えて

0

$(this).attr()を代わりに使用してください。

+0

私の一部にはタイプミス。 – RHPT

2

この

$('button#submit').click(function() { 
    var addr_chkd = 0; 
    $('input:radio:[name="address"]').each(function() { 
     if (!$(this).is(':checked')) 
      addr_chkd++ 
    }); 
}); 

か、また

$('button#submit').click(function() {  
     var addr_chkd = $('input:radio[name="address"]').length - 1; 
} 
として行うことができますので、一度に一つだけのラジオボタンをチェックすることができるので、あなたは、単に

$('button#submit').click(function() {  
    var addr_chkd = $('input:radio[name="address"]:not(:checked)').length 
} 

としてそれを行うことができますしてみてください

上記のすべての例:http://jsfiddle.net/pdm2F/

var addr_chkd = $('input:radio[name="address"]:checked').length; 

それとも、意味場合はチェックされていない:

var addr_chkd = $('input:radio[name="address"]').not(':checked').length; 

しかし、ラジオ入力のために、あなたは間違って何かをすること

1

あなたは非常に簡単な方法を使用することができます。

+1

OPはチェックされていません。 –

2

私はあなたがしようとしていることについて完全にはっきりしていませんが、私はaddr_chkdを2通りの方法で解釈できます。

「addrは」「加算器」の略で、あなたが未確認ラジオボタンの数を、この使用したい場合は、次の場合は

$('button#submit').click(function() { 
    var radios = $('input:radio[name="address"]'); 
    var num_unchecked = radios.filter(':not(:checked)').length; 
    if (num_unchecked) { 
     // do something 
    } 
}); 

を、一方で、「ADDR」手段両方のケースで、私はclickハンドラ内if句を移動したこと

$('button#submit').click(function() { 
    var radios = $('input:radio[name="address"]'); 
    var checked = radios.filter(':not(:checked)').get(0); 
    if (checked.length > 0) { 
     var index_checked = radios.index(checked); 
     // do something 
    } 
}); 

注:「住所」、そしてあなたが選択したラジオボタンのインデックスをしたいが、これを使用します。あなたの例では、clickハンドラの外にありました。つまり、ボタンがクリックされる前であっても一度だけ実行されます。

+0

未チェックのラジオボタンの数を数えたいと思います。 ifがクリックの外側にあることを指摘してくれてありがとう。 – RHPT

関連する問題