0

この関数は、ユーザーが選択するチェックボックスの数を制限しますが、name 属性に角かっこ (つまりname=baz[]) があると機能しません。

何らかの理由で、このコードを jsfiddle で動作させることはできませんが、このチュートリアルに基づいており、動作するデモがあります。

function chkcontrol(j) {
    var total = 0;
    for (var i = 0; i < document.form1.baz.length; i++) {
        if (document.form1.baz[i].checked) {
            total = total + 1;
        }
        if (total > 3) {
            alert("Please select up to three choices")
            document.form1.baz[j].checked = false;
            return false;
        }
    }
}

 <form name="form1">
    <input type=checkbox name="baz[]" value="1" onclick="chkcontrol(0);">Item 1
    <input type=checkbox name="baz[]" value="2" onclick="chkcontrol(1);">Item 2
    <input type=checkbox name="baz[]" value="3" onclick="chkcontrol(2);">Item 3
    <input type=checkbox name="baz[]" value="4" onclick="chkcontrol(3);">Item 4
    <input type=checkbox name="baz[]" value="5" onclick="chkcontrol(4);">Item 5

    <input type=submit value="submit">

</form>
4

1 に答える 1

1

茶屋さん、あなたの問題は実際には「[]」が名前の一部であるという事実に起因しています.

フォームとその名前付き要素を JS でアクセス可能なオブジェクトに自動的に変換する規定はありますが、サーバー側の違いであるため、どの要素が配列であることを意図しているか、配列ではないことを理解する規定はありません?baz[]=1&baz[]=2

要求するform1["baz[]"];場合は、 という名前のすべての要素のリストを取得する必要があります"baz[]"

そこから、form1["baz[]"][0];「baz[]」という名前の最初の要素を取得する必要があるとします。

もちろん、名前に「[]」が含まれるすべての要素を自動的に検索し、「baz[]」という名前のすべての要素で満たされたフォームの配列として「baz」を追加する解析マジックを作成することもできます。そして、その時点で、以前にやろうとしていたことを正確に行うことができました.

それがやり過ぎかどうかは、あなたが何をしているかによって異なります。

しかし、単にform1["baz[]"][i]ループに書き込むだけでも、現在得ているものよりもはるかに時間がかかることはありません。

于 2013-03-13T20:52:51.390 に答える