使用jQuery进行电子邮件检查并不起作用

时间:2015-06-18 14:22:20

标签: javascript jquery ajax-forms

我尝试制作Ajax表单并尝试在那里进行电子邮件验证。我找到了这个解决方案 http://jsfiddle.net/EFfCa/

但无法在我的剧本中启用它:

<script> 
    $('#joinForm').ajaxForm(function() {
        var testEmail = /^[A-Z0-9._%+-]+@([A-Z0-9-]+\.)+[A-Z]{2,4}$/i;
        var name = $("input[name=name]")
        var email = $("input[name=email]")
        if(name.val()==''||email.val()=='') {
            $(".notify").show();
            $(".notify p").text('empty');
        } else if(testEmail.test(email.value)) {
            $(".notify").show();
            $(".notify p").text('email is wrong');      
        } else {
            $(".notify").show();
            $(".notify p").text('good');    
        }
    }); 
</script>

表单总是通过验证,即使电子邮件错误。空字段的验证效果很好......

3 个答案:

答案 0 :(得分:1)

如果电子邮件正确,以下行else if(testEmail.test(email.value))将返回true。

在您的逻辑中,电子邮件出错的地方可能是问题吗?

答案 1 :(得分:1)

这是因为你的传递email.valuejquery个对象没有名为value的参数,因此会解析为undefined

.test()如果传递未定义则返回true,因此测试将始终通过。

改为使用.val()

答案 2 :(得分:0)

  $('input').blur(function() {
        var testEmail =/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i;
        if (testEmail.test(this.value)) alert('passed');
        else alert('failed');
    });