0

I have tried so many options, but nothing has worked.

The main problem is that I have so many check boxes all are generated through php loop, so they have same name and id. I want to check that on submit of that form that at least one should be checked. I have tried so many function so not sure which should be pasted here. So it is better that some one suggest me some fresh answer.

function Validate_Checkbox()
{
    var chks=document.getElementsByTagName('input');   
    var hasChecked = false;
    for (var i = 0; i < chks.length; i++)
    {
        if (chks[i].checked)
        {
            hasChecked = true;
            break;
        }
    }
    if (hasChecked == false)
    {
        alert("Please select at least one checkbox..!");

        return false;
    }

    return true;
}

It is called as onsubmit="return Validate_Checkbox()" in form tag.

Basically I am looking for a JavaScript function.

4

4 に答える 4

2

さて、あなたのコードはあなたが説明する目的のためにOKです。短くなる可能性がありますが、明らかな問題はありません。

短縮版

function validate_checkbox() {
    var cbs = document.getElementsByTagName('input');
    for (var i=0, len = cbs.length; i < len; i++)
        if (cbs[i].type.toLowerCase() == 'checkbox' && cbs[i].checked)
            return true;
    alert("Please check at least one checkbox");
    return false;
}

さらに短いバージョン(古いIEを気にしない場合)

function validate_checkbox() {
    var checked = document.querySelectorAll('input[type=checkbox]:checked').length;
    if (!checked) alert("Please select at least one checkbox");
    return !!checked;
}

ノート:

1)IDは一意である必要があります-複数の要素にわたってIDを繰り返すことはできません

2)JavaScriptでは、(この投稿の範囲を超えている理由で)次ではなく、同じ行に中括弧を開く方が適切です。

3)関数をインスタンス化する予定がない限り、関数の大文字化は避けてください

于 2012-08-24T09:36:39.250 に答える
0

なぜ送信時にチェックするのですか?各チェックボックスでonchangeと呼ばれ、同じdiv内のすべてのチェックボックスをチェックするMootoolsを使用して関数を作成しました。チェックされている他のチェックボックスがない場合、ユーザーは最後にチェックされたチェックボックスのチェックを外すことはできません。

<input type='checkbox' onChange='validateCheckboxes(this)' name='name' value='val' >

 function validateCheckboxes(elem){
                    var checked = elem.checked;
                    elem.getParent().getElements("input[type=checkbox]").each(function(e){checked += e.checked});
                    if(checked == 0){
                        elem.checked = 1;
                    }
                }
于 2013-02-26T23:06:05.760 に答える
0

textまたはsubmitボタンのような他のタイプの入力がある場合、コードは失敗します。最初に、それがチェックボックスかどうかを確認する必要があります。

if (chks[i].type=="checkbox" && chks[i].checked)

または、jQueryを使用すると簡単になります

if ($('input:checked').length < 1){
  //Nothing checked
}
于 2012-08-24T09:37:44.123 に答える
0

機能は問題ないようです。必ず呼び出されますか?firefox "Firebug" を使用してデバッグしてみてください。firebug->script を開き、この関数にブレークポイントを設定します。

于 2012-08-24T09:38:54.300 に答える