2012-01-24 9 views
1

jquery mobile 1.0を使用しています。行列型jqueryの行に基づくラジオの検証

私は私が送信ボタンをクリックしたときに、私はすべての行に値が選択されるべきであることを検証する必要があり、このコード

<table> 
<tr> 
<td> <input type="radio" id="r11" value="a" name="r1_selectedobjects" /> </td> 
    <td><input type="radio" id="r12" value="b" name="r1_selectedobjects" /> <td> 
</tr> 
<tr> 
    <td><input type="radio" id="r21" value="a" name="r2_selectedobjects" /></td> 
    <input type="radio" id="r22" value="b" name="r2_selectedobjects" /></td> 
</tr> 
    <td><input type="radio" id="r31" value="a" name="r3_selectedobjects" /></td> 
    <td><input type="radio" id="r32" value="b" name="r3_selectedobjects" /></td> 
<tr> 
<tr> 
<td><input type="submit" id="matbutton" data-inline="true" value="Submit" onclick="return CheckMatrixRadio(this);" /></td> 
    </tr> 
</table> 

を持っています。私はこのスクリプトを書いた。

function CheckMatrixRadio(button) { 
var totalvalues =''; 
     $('input[name$=_selectedobjects]:checked').each(function() { 
       if ($(this).val()) { 
        totalvalues += $(this).val() + ','; 
       } 
       else { 
        alert('Can not leave empty'); 
       } 
     }); 
    } 

でも、正しく動作しません(行を考慮しない)。 Jqueryでそれをどのように検証するべきですか?

ありがとうございます。あなたが唯一確認されている入力を選択された:checkedセレクタを適用している

答えて

0

は、単にそれが動作することはできません。この

var all_checkd = true; 
var totalvalues =''; 

$('tr:not(:eq(3))').each(function(index){ 


     if($(this).find('input[name*="_selectedobjects"]').is(':checked')) 
     { 
      totalvalues += $(this).find('input[name*="_selectedobjects"]:checked').val() +','; 
     } 
     else 
     { 
     all_checkd = false; 
     } 
}); 

if(all_checkd) 
{ 
    //do the work 
} 
+0

'$( ':radio')'は6個の要素を返しますので、動作しません。あなたは3トップを選択することができます。 – Krzysztof

+0

@ Lolo。 nop。同じ名前の2つのラジオボタンをチェックすることはできません;) –

0

を行います。まず、チェックされた要素のみを選択し、次にval()は、チェックされていない状態のラジオボタンの値を返します。これを試してください:

function CheckMatrixRadio(button) { 
    var totalvalues =''; 
    var checked = $('input[name$=_selectedobjects]:checked'); 

    var count = 0; 
    var map = {}; 
    $('input[name$=_selectedobjects]').each(function() { 
     if (!map[this.name]) { 
      map[this.name] = true; 
      count++; 
     } 
    }); 

    if (checked.length < count) { 
     alert('Can not leave empty'); 
     return false; 
    } 

    checked.each(function() { 
     totalvalues += $(this).val() + ','; 
    }); 

    return true; 
} 
関連する問題