【问题标题】:Why doesn't my Javascript Email Validation Work为什么我的 Javascript 电子邮件验证不起作用
【发布时间】:2013-03-06 23:55:26
【问题描述】:

我用 jquery 和 javascript 制作了一个简单的表单,但是电子邮件验证(确保其中包含 @.)似乎不起作用。

这里是 JSFiddle:http://jsfiddle.net/LCBradley3k/xqcJS/11/

这是验证的代码。是不是发错地方了?

function validateForm() {
  var x = document.forms["signup"]["email"].value;
  var atpos = x.indexOf("@");
  var dotpos = x.lastIndexOf(".");
  if(atpos < 1 || dotpos < atpos + 2 || dotpos + 2 >= x.length) {
    $('#answer').html('Not a valid email')
    return false;
  }
}

【问题讨论】:

  • stackoverflow.com/a/46181/211081 - 这对你没有帮助吗?
  • 理解起来有点混乱。我只是想弄清楚上面的代码在哪里适合我当前的代码。
  • 您在倒数第三行缺少分号。
  • jQuery Javascript。
  • @MattPsyK - 该答案可能会被接受并获得 445 票,但这是一个糟糕的答案。该答案中给出的正则表达式将拒绝许多有效的电子邮件地址。像 James Mitchell 的“至少一个'@'和一个'。”这样的最小验证。 required" 更好,因为真正验证电子邮件地址的唯一方法是向其发送电子邮件。

标签: javascript jquery forms validation input


【解决方案1】:

首先,您的代码包含错误,因为您缺少}。 其次,当按钮join被点击时,你不要调用validateForm

$('#join').click(function () {

            var correct = true;
            var validEmail = true;

            $('input[type="text"]').each(function (indx) {
                var $currentField = $(this);
                if ($currentField.val() === '') {
                    $currentField.addClass('empty');
                    correct = false;
                    $currentField.one('keydown', function () {
                        $currentField.removeClass('empty');
                    });
                } else {
                    $currentField.removeClass('empty');
                }

            });              

            function validateForm() {
                var x = document.forms["signup"]["email"].value;
                var atpos = x.indexOf("@");
                var dotpos = x.lastIndexOf(".");
                if (atpos < 1 || dotpos < atpos + 2 || dotpos + 2 >= x.length) {                       
                    correct = false;
                    validEmail = false;
                }
            }

            validateForm();

            if (correct) {
                $('#answer').html('Thank You!');
                setTimeout(function () {
                    $('.inputs').hide("slide", { direction: "up" }, 1000);
                }, 2000);
            } else {
                if(validEmail)
                     $('#answer').html('Please fill highlighted fields.');
                else
                     $('#answer').html('Not a valid email');
            }
        });

【讨论】:

  • 非常感谢您的帮助。还有一个快速的问题。正如您在代码中看到的那样(它说如果(正确)),我让它向上滑动。出于某种原因,即使它说不是有效的电子邮件,该 slideUp() 仍然有效。我将如何阻止这种情况发生?
  • @JamesMitchell:您需要存储validateForm 结果..查看我编辑的答案
  • 当前代码没有说“不是有效的电子邮件”,它只是说“请填写突出显示的字段”
  • 是的,它会先显示Not a valid email,然后替换为Please fill highlighted fields.
猜你喜欢
  • 1970-01-01
  • 2014-12-12
  • 2012-08-19
  • 1970-01-01
  • 2018-01-29
  • 2021-01-15
  • 2014-06-08
  • 1970-01-01
  • 2017-05-27
相关资源
最近更新 更多