我有一个关于如何缩短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
维姆
答案 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
}