4

基本的なフォーム検証スクリプトを作成しましたが、ユーザーが必須フィールドに入力しなかった場合に発生するエラーをリセットしようとしています。

errorチェックボックスとラジオボタンについては、ラベルにクラスを追加しました。このためのHTMLコードは次のようになります。

<input class="required" id="Example31" name="Example3" type="checkbox" />
<label for="Example31" class="error">Example Input 3 Option 1</label>

<input class="required" id="Example32" name="Example3" type="checkbox" />
<label for="Example32" class="error">Example Input 3 Option 2</label>

<input class="required" id="Example4" name="Example4" type="radio" />
<label for="Example4" class="error">Example Input 4</label>

エラーを追加するには、次のスクリプトを使用して、同じ名前のチェックボックスがオンになっているかどうかを確認します。

$("input.required").each(function() {
    // check checkboxes and radio buttons
        if ($(this).is(":checkbox") || $(this).is(":radio")) {
            var inputName = $(this).attr("name");
            if (!$("input[name=" + inputName + "]").is(":checked")) {
                var inputId = $(this).attr("id");
                $("label[for=" + inputId + "]").addClass("error");
                error = true;
            };
        };
    // end checkboxes and radio buttons
});

HTMLを変更せずにエラーを削除するにはどうすればよいですか?私は完全な空白を描いています。これが私が考えていることです:

  1. エラーのある各ラベルに関連付けられている名前を把握する
  2. そのIDを持つチェックボックスまたはラジオボタンを見つけます
  3. チェックボックスまたはラジオボタンの名前を把握する
  4. 同じ名前の残りのチェックボックスまたはラジオボタンを検索します
  5. それらの入力IDを見つけます
  6. それらの名前のラベルを検索する
  7. それらのラベルからエラーをクリアします

しかし、私は途方に暮れています。誰かが助けることができれば、それは大いにありがたいです。

4

2 に答える 2

0

私はあなたの「思考」をコードに変換しました。これがあなたのために働くかどうか見てください...

// Figure out the name associated with each label that has an error
$(".error").each(function() {
    var m = $(this).attr('for');

    // Find the checkbox or radio button that has that ID
    $("input[id=" + m + "]").each(function() {

        // Figure out the checkbox or radio buttons name
        var n = $(this).attr('name');

        // Find the rest of the checkboxes or radio buttons with the same name
        $("input[name=" + n + "]").not(this).each(function() {

            // Find those inputs IDs
            i = $(this).attr('id');

            // Find labels with those names
            $("label[for=" + i + "]").each() {

                // Clear the errors off of those labels
                $(this).removeClass("error");
            });
        });
    });
});
于 2013-01-18T18:21:22.477 に答える
0

私はこれを使って自分でそれを解決することができました:

$("input.required").each(function() {
    if ($(this).is(":checkbox") || $(this).is(":radio")) {
        var inputName = $(this).attr("name");
        var labelFor = $(this).attr("id");
        $(this).click(function() {
            $("input[name=" + inputName + "]").each(function() {
                var labelFor = $(this).attr("id");
                $("label[for=" + labelFor + "]").removeClass("error");
            });
        });
    };
});
于 2013-01-18T19:34:44.100 に答える