缩短Jquery条件

时间:2009-11-14 14:06:09

标签: javascript jquery validation optimization

我有一个关于如何缩短Jquery if语句的问题。在我的表格中,我有几个字段,我检查它们是否填满。我知道有几个插件可供我使用,但我不想自己学习(在其他人的帮助下; - ))

我得到了这张支票

//---- First define hasError
var hasError = false;
//---- Get the value from the inputfield
var firstname = $('#firstname').val();
//---- Do the check
if(firstname == ''){
 $("#error_firstname").show();
 hasError = true;
}else{
 $("#error_firstname").hide();
}

我以为我可以这样写:

(firstname == '') ? $(".firstname").show(): $(".firstname").hide();

这有效,但我不能把 hasError = true 放进去,所以我最后不能问这个

if(hasError != false) {
 //---- if error, don't refresh page and show errors
 return false;
}else{
 //---- Save values to DB and show succes message
}

有人有个主意吗?

提前Tnx

Grtzz

维姆

3 个答案:

答案 0 :(得分:8)

首先,将其重构为一个函数,以便您可以在所有字段中重复使用它。

示例:

function check(fieldname) {
    var value = $('#' + fieldname).val();
    var error = $('#error_' + fieldname);
    if (value == '') {
        error.show();
        $.hasError = true;
    } else {
        error.hide();
    }
}

以便您可以按如下方式使用它:

check('firstname');
check('lastname');
// etc..

当然,您可以通过将所有名称存储在数组中或仅通过获取$(':input')并在循环中调用check()来进一步重构。你一直忙于重构;)你最终可以看看现有的表单验证插件是如何做到的。例如jQuery Validator

重点是:不要重复代码。重构它。

答案 1 :(得分:0)

您可以为jQuery show()hide()方法设置回调:

(firstname == '') ? $(".firstname").show(function(){ hasError = true; }): $(".firstname").hide();

答案 2 :(得分:0)

好吧,我建议你使用JQuery Validation插件,但我会认为你想要用'硬'的方式学习它。 :P

让错误消息采用相同的类,例如“错误”

<span class="error" id="err_firstname">...</span>
<span class="error" id="err_lastname">...</span>
<span class="error" id="err_email">...</span>

如果span.error:visible中的任何一项至少有一项,则hasError = true

 $("span.error:visible").each(function (i) {
    hasError = true;
    return;
  });

hasError标志检查也可以缩短:

if(hasError) {

 //---- if error, don't refresh page and show errors

 return false;
}
else {

 //---- Save values to DB and show succes message

}