我有一个表单供用户更改其设置。它有5个字段 - 名字,姓氏,密码,确认密码和电子邮件地址。
唯一的问题是我必须确保密码匹配并且电子邮件是有效的。用户可以使用任何或所有字段。
我的头脑中的可能性是:
我正在使用jQuery来处理所有这些。到目前为止,这是我的代码:
$('#success').hide();
$('#pwerror').hide();
$('#subSet').live('click',function() {
//if any of the fields have a value
if($("#chfn").val() != "" || $("#chln").val() != "" || $("#chpw").val() != "" || $("#chpw2").val() != "" || $("#chem").val() != "")
{
//if the email field isn't empty (i.e. something is typed in), then check for email validation and post if valid
if($("#chem").val() != "")
{
$("#profSet").validate({
rules: {
chem: {
email: true
}
}
});
if($("#profSet").valid())
{
$.post('php/profSet.php', $('#profSet').serialize(), function(){
$('#profSet').hide();
$('#success').show();
});
}
}
//checks if either of the password fields are filled
if($("#chpw").val() != "" || $("#chpw2").val() != "")
{
//now checks if they are equal
if($("#chpw").val() == $("#chpw2").val())
{
$.post('php/profSet.php', $('#profSet').serialize(), function(){
$('#profSet').hide();
$('#success').show();
});
}
//if they aren't equal (which means if they are mismatching string, or if either one is blank), show error
else
{
$('#pwerror').show();
}
}
//if it's not an email or password field, then just post, there are no conditionals for the first/last names
if($("").val())
{
$.post('php/profSet.php', $('#profSet').serialize(), function(){
$('#profSet').hide();
$('#success').show();
});
}
}
});
就我如何订购条件而言,此代码的问题很明显。如果跳过较早的条件,则可以提交错误输入而不检查错误输入。
有没有办法让这个表单工作而不写出九个不同的if语句?
答案 0 :(得分:1)
那里的逻辑似乎相当复杂,所以我认为没有办法避免嵌套的if语句。您可能希望使用标志变量,这样可以更容易地读取和诊断逻辑问题......
所以例如: var isEmail = false;
if($(“#chem”)。val()!=“”){isEmail = true; }
也许这可能会让事情变得更容易。希望这会有所帮助。
答案 1 :(得分:0)
为了澄清,您希望表单提交有效,只要:
这是对的吗?如果是这样,为什么不做这样的事情:
if (!isEmailValid()) // <-- You need to define how this function works
// Show error message and stop form submission
if ($("#password").val() != $("#password_confirm").val())
// Show error message and stop form validation
// No issue with e-mail or password/password confirmation! Let the form submission go through!