选中复选框后,从标签中删除类

时间:2013-01-18 18:01:21

标签: javascript jquery

我已经编写了一个基本的表单验证脚本,现在我正在尝试重置用户未填写必填字段时发生的错误。

对于复选框和单选按钮,我已将类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. 清除这些标签的错误
  8. 但是,我很失落。如果有人可以提供帮助,那将非常感激。

2 个答案:

答案 0 :(得分: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");
            });
        });
    });
});

答案 1 :(得分: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");
            });
        });
    };
});