jQuery验证工作但不是正确的方法

时间:2014-09-17 08:26:38

标签: javascript jquery validation

我有一个简单的jQuery验证,我需要在我的网站的不同页面上检查必填字段。

目前我有以下代码可以使用。我检查了函数 check_inputs(),但在我看来这不是正确的方法。

// Check the required fields
function check_inputs() {
    var errors = false;
    jQuery('#wiz-action .required').each(function () {
        var input = jQuery(this);
        if (input.val().length < 1) {
            input.addClass('error');
            errors = true;
        } else {
            input.removeClass('error');
            errors = false;
        }
    });

    if (errors == false) {
        return true;
    }
}

// Check fields on blur
$('#wiz-action input.required').blur(function () {
    var input = $(this);
    input.removeClass('error');
    if (input.val().length < 1) {
        input.addClass('error');
    } else if (!input.val().match(/^\d+$/)) {
        input.addClass('error');
    }
});


// Check fields by clicking "next" link 
$('#next-link').click(function (e) {

    if (check_inputs() == true) {
        // Do something

    } else {
        $('.error-message').fadeOut(200).fadeIn(200);
    }
});
.error {
    border: 1px solid #f00;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"></script>
<div id="wiz-action">
    <input type="text" class="required">
    <input type="text" class="required"> 
    <a id="next-link" href="#">Next</a> 
</div>

2 个答案:

答案 0 :(得分:0)

// Check the required fields
function check_inputs() {
    var errors = false;
    $('#wiz-action .required').each(function () {
        var input = $(this);
        if (input.val().length < 1) {
            input.addClass('error');
            errors = true;
        } else {
            input.removeClass('error');
            errors = false;
        }
    });

    if (errors == false) {
        return true;
    }
}

// Check fields on change
$('#wiz-action input.required').change(function () {
    var input = $(this);
    input.removeClass('error');
    if (input.val().length < 1) {
        input.addClass('error');
    } else if (!input.val().match(/^\d+$/)) {
        input.addClass('error');
    } else {
        input.removeClass('error');
    }
    check_inputs();
});


// Check fields by clicking "next" link 
$('#next-link').click(function (e) {

    if (check_inputs() == true) {
        // Do something

    } else {
        $('.error-message').fadeOut(200).fadeIn(200);
    }
});

答案 1 :(得分:0)

我创建了一个jsfiddle并改变了一些东西。 http://jsfiddle.net/5z8r166v/3/

我在点击元素时创建了一个焦点。在这里,我删除错误类。 这只是一个前端决定,但我删除了红线。

当点击(模糊)时,我检查是否有值,然后设置错误类,如果没有值。
我使用==“”检查它是否为空而不是长度。在这里你必须计算字符串的长度。
性能稍微好一些。
我知道你不会注意到它导致它只有几毫秒+我觉得它更容易阅读。

在下一次点击中我添加了

e.preventDefault();

可防止按钮的默认操作。不知道你想做什么,但知道何时使用它。

您添加了正则表达式。可能这是你允许的角色所必需的。 你忘了在下一个按钮点击检查它。也在那里添加。

下一个按钮点击循环事实上有一个错误。你这样做了

  if (input.val().length < 1) {
        input.addClass('error');
        errors = true;
    } else {
        input.removeClass('error');
        errors = false;

但是如果最后一个文本框是好的并且文本框仍然是空的或无效的,那么该变量将被覆盖为false,这使得它在下一次单击按钮时继续,这是不正确的。

还可以使用好的变量名称。
我使用hasError而不是错误,因为它是一个布尔类型。
你也像这样返回变量

if (errors == false) {
    return true;
}

但是因为它是一个布尔值,你只需要返回值。
如果要在发送之前反转布尔值,请使用

return !hasError 

但在这种情况下不需要它。

最后但并非最不重要:您选择OnLoad但OnDomready就足够了,因为您不使用图像。

我希望这会有所帮助。