【问题标题】:JavaScript if statement ignores conditionJavaScript if 语句忽略条件
【发布时间】:2018-10-25 15:07:39
【问题描述】:

我有一个 JavaScript 代码来验证我的联系表单并执行 POST 到 PHP 脚本,问题是脚本忽略 IF 语句并在我的 validateForm 函数的响应为假时执行发布。

如果 validateForm() 返回 false,它仍在执行 POST 操作

这是带有函数结果的控制台打印

我的 JS 代码:

    $(document).ready(function() {
    $("form[name='contactf']").submit(function(e) {             
        // do the extra stuff here      
        e.preventDefault();
        console.log(validateForm());
        if(validateForm()){                     
            $.ajax({                
                type: "POST",
                url: "mail.php",
                data: $(this).serialize(),            
                success: function(data) {                   
                    if(data.message == 'success'){                      
                        M.toast({html: 'Mensagem enviada com sucesso!'})
                        $('#first_name').val('');
                        $('#last_name').val('');
                        $('#subject').val('');
                        $('#email').val('');
                        $('#phone').val('');
                        $('#details').val('');
                    }else if(data.message == 'error'){
                        M.toast({html: 'Ops... Tente novamente dentro de alguns minutos.'})
                    }
                }
            })
        }
        else
            ;
    })
    function validateForm()
    {
        var name=document.forms["contactf"]["first_name"].value;
        var surname=document.forms["contactf"]["last_name"].value;
        var subject=document.forms["contactf"]["subject"].value;
        var mail=document.forms["contactf"]["email"].value;
        var phone=document.forms["contactf"]["phone"].value;
        var details=document.forms["contactf"]["details"].value;
        var isnum = /^\d+$/.test(phone);        
        if(!isnum){
            M.toast({html: 'O telefone deve conter apenas números!'});
            return false;
        }       
        else if (!name || !surname || !subject || !mail || !phone || !details)
        {
            M.toast({html: 'Preencha todos os campos!'})
            return false;
        }
        else
            return true;        
    }   
    function id( el ){
        return document.getElementById( el );
    }
})  

【问题讨论】:

  • 你能完全确定你的 validateForm 函数没有返回 true 吗?
  • 你调试了吗?如果您逐步执行该功能,则应该很清楚正在发生什么。如上所述,您的 IF 逻辑看起来很奇怪......
  • 等等 - else if 中的 validateForm() 是错误的。你用逗号分隔表达式,我怀疑那是你真正想要的。逗号不会像你想的那样。
  • 我以前从未见过这种语法(使用逗号):if (name==null || name=="",surname==null || ...
  • 逗号运算符, 应该是另一个逻辑或|| 否则你只是在测试details

标签: javascript jquery ajax if-statement materialize


【解决方案1】:

你的布尔逻辑是错误的。

如果 value 为 null 或空字符串,则可以使用 !value 生成 true,然后 OR他们都使用||

这是基于类型强制转换为布尔值,有关更多信息,请参见例如this MDN page

例子:

function validateForm(v1, v2, v3) {
  var name = v1;
  var surname = v2;
  var subject = v3;

  if (!name || !surname || !subject)
    return false;
  else
    return true;
}

console.log(validateForm(null, null, null));
console.log(validateForm(null, "", "Test"));
console.log(validateForm("John", "Smith", "Test"));

【讨论】:

    【解决方案2】:

    您需要更改else if 条件。 将条件写成:

    else if (name==null || name=="" || surname==null || surname=="" || subject==null || subject=="" || mail==null || mail=="" || phone==null || phone=="" || details==null || details=="")
    

    请勿使用 逗号 (,) 进行分隔。

    【讨论】:

    • 为什么这可行,Peter B. 的解决方案要优雅得多
    • 检查这个 [尝试删除 name 值] jsfiddle.net/7dhgo8ca
    • 我同意 Peter B. 的方式。我只想说,Murilo Pereira 可以通过删除条件中的那些 (,) 来使他的代码工作。
    • @DelowarHossain 感谢 jsfiddle,代码工作正常,我做了更改但没有成功,也许这可能是 Ajax 错误?
    • 你在 if(validateForm()) 之后有一个空的 else,尝试修复它。它可能会有所帮助。
    猜你喜欢
    • 2014-03-04
    • 2019-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-27
    • 1970-01-01
    • 1970-01-01
    • 2012-07-15
    相关资源
    最近更新 更多