2012-07-13 178 views
0

我想驗證一些使用Jq的複選框組,但我不知道我在做什麼錯。Jquery複選框驗證

我使用相同的代碼來驗證其他形式(而不是複選框和工作正常。

form.php的

<form id=frm_ch> 
<td><input type="checkbox" name="g1" id="h1" value="1" /></td> 
<td><input type="checkbox" name="g1" id="d1" value="2" /></td> 
<td><input type="checkbox" name="g1" id="a1" value="3" /></td> 

<td><input type="checkbox" name="g2" id="h2" value="1" /></td> 
<td><input type="checkbox" name="g2" id="d2" value="2" /></td> 
<td><input type="checkbox" name="g2" id="a2" value="3" /></td> 

<td><input type="checkbox" name="g3" id="h3" value="1" /></td> 
<td><input type="checkbox" name="g3" id="d3" value="2" /></td> 
<td><input type="checkbox" name="g3" id="a3" value="3" /></td> 

validate.js

//global vars 
var frm_ch = $("#frm_ch"); 
var g1 = $("name=g1"); 
var g2 = $("name=g2"); 
var g3 = $("name=g3"); 
var cInfo = $("#cInfo"); 

frm_ch.submit(function(){ 
    if(valG1() & valG2() & valG3()){ 

var g1 = $("name=g1").attr('value'); 
var g2 = $("name=g2").attr('value'); 
var g3 = $("name=g3").attr('value'); 

//validate functions are all the same so I am posting just one: 

function valG1(){ 
    //if it's NOT valid 
    if($('input[name=g1]:checked').size() == 0){ 
     cInfo.text("Please check a Checkbox"); 
     cInfo.addClass("error"); 
     return false; 
     } 
     //if it's valid 
     else{ 
     cInfo.text(""); 
     cInfo.removeClass("error"); 
     return true; 
    } 
} 
+2

爲什麼你使用複選框和推杆相同的名字!請使用收音機而不是複選框或嘗試更改名稱爲g1 []而不是g1 – HADI 2012-07-13 05:54:10

回答

1

你有語法錯誤,所有的值都爲真。你缺少兩個封閉大括號和右括號(例如添加

}})

你的代碼的末尾)。你的提交處理程序也沒有返回任何東西。此外,作爲DRY(不要重複自己)原則的一部分,你不希望有三個不同的函數valG1,valG2,valG3,它們基本上做同樣的事情。此代碼有效。

var frm_ch = $("#frm_ch"); 
var g1 = $("name=g1"); 
var g2 = $("name=g2"); 
var g3 = $("name=g3"); 
var cInfo = $("#cInfo"); 

function valG1() { 
    //if it's NOT valid 
    if ($('input[name=g1]:checked').size() == 0 || 
     $('input[name=g2]:checked').size() == 0 || 
     $('input[name=g3]:checked').size() == 0) { 
     cInfo.text("Please check a Checkbox"); 
     cInfo.addClass("error"); 
     return false; 
    } 
    //if it's valid 
    else { 
     cInfo.text(""); 
     cInfo.removeClass("error"); 
     return true; 
    } 
} 

frm_ch.submit(function() { 
    if (valG1()) { 

     var g1 = $("name=g1").attr('value'); 
     var g2 = $("name=g2").attr('value'); 
     var g3 = $("name=g3").attr('value'); 
     return true; 
    } 
    else 
    { 
     return false; 
    } 
}) 
     ​ 
+0

「你不想有三種不同的功能」,但是如果($('input [name = g1]:checked')'只檢查不同的組和複選框(g1,g2,g3)對於g1組 – Pavlos1316 2012-07-13 06:51:36

+0

您可以將該組的名稱作爲參數傳遞給該函數,即valG(組) – ryuusenshi 2012-07-13 06:57:45

+0

它可以工作。謝謝 – Pavlos1316 2012-07-13 20:26:44

1

你缺少一些語錄在你的形式,這是不是必需的,但總是使用它們被認爲是良好的做法

<form id=frm_ch> <-- You have 
    <form id="frm_ch"> <-- should be 

您也使用按位運算符在條件語句這裏

frm_ch.submit(function(){ 
     if(valG1() & valG2() & valG3()){ 

您要使用的條件運算符& &檢查

frm_ch.submit(function(){ 
     if(valG1() && valG2() && valG3()){ 
+0

我認爲這不會是一個問題 – mrsrinivas 2012-07-13 06:03:15

+0

@Mr Srinivas謝謝指出,我不知道引用是可選的 – 2012-07-13 06:23:46

+0

@DeckerWBrower < form id = frm_ch>是一個輸入錯誤。我將檢查現在的運營商 – Pavlos1316 2012-07-13 06:45:51

0

假設複選框的格式如下:g1 [],g1 []。 G1 [],G2 [],G2 [],...

你可以試試這個:

var frm_ch = $("#frm_ch"); 

frm_ch.submit(function(){ 

    for(var i = 1; i <= 3; i++){ 
     var $ch = $.each($("input[name='g"+i+"[]']:checked"), function() { 
       var $this = $(this); 
       return $this; 
     }); 
     if(!$ch.val()) alert('check checkbox group n: '+i); 
    } 

});