0

Jq を使用してチェックボックスのいくつかのグループを検証しようとしていますが、どこが間違っているのかわかりません。

同じコードを使用して他のフォームを検証します (ただし、チェックボックスは検証せず、正常に動作しています。

フォーム.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;
    }
}
4

3 に答える 3

1

構文エラーがあります。2 つの右中括弧と右括弧がありません (例: add

}})

コードの最後まで)。また、送信ハンドラーは何も返していません。さらに、DRY (自分自身を繰り返さない) 原則の一部として、本質的に同じことを行う 3 つの異なる関数 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;
    }
})
        ​
于 2012-07-13T06:24:21.210 に答える
1

必須ではありませんが、常に使用することをお勧めします。

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

ここの条件文でもビット単位の演算子を使用しています

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

条件演算子 && を使用して、すべての値が true かどうかを確認したい

    frm_ch.submit(function(){
        if(valG1() && valG2() && valG3()){
于 2012-07-13T05:57:54.223 に答える
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);
    }

});
于 2012-07-13T06:27:44.143 に答える