【问题标题】:JavaScript Form Validate - "False" not working as neededJavaScript 表单验证 - “假”未按需要工作
【发布时间】:2015-04-06 12:12:23
【问题描述】:

我正在尝试评估表单文本/电子邮件字段以查看是否存在某些内容,如果存在,则将其运行通过正则表达式评估。当我在 SendEmail 函数中包含正则表达式代码和其余逻辑时,它运行良好,但是当我尝试将正则表达式部分移到它自己的函数(validateEmailAddress)中时,验证仍然有效,但它似乎不想返回 false 并停止。相反,它继续到 ajax 部分并发送电子邮件,无论它是否通过正则表达式测试。这是相同的代码,所以我不确定为什么一旦将正则表达式移出到它自己的函数中,“return false”就不起作用了。

感谢您的任何想法并感谢您!

   function validateEmailAddress(address) {

   filter = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,4})+$/;
      if (!filter.test(address)) {
      alert(address + ' - Is an invalid email address.');
      return false;
   }
   }

    function SendEmail() {
   var emailFromVal = document.getElementById("EmailFrom").value;
   var emailToVal = document.getElementById("EmailTo").value;

   if (emailFromVal != 0) {
    validateEmailAddress(emailFromVal);
   } else {
    alert("Please provide your email address.");
    return false;       
   }

   if (emailToVal != 0) {
   }
   else {
    alert("Please provide your friend's email address.");
    return false;
   }

   $.ajax({
    method: 'POST',
    url: '/_ajax/emailshare/',
    dataType: 'json',
    data: formCollection,
    success: function (data) {
        ///send that email out 
    }
   });
   }

【问题讨论】:

    标签: javascript regex validation form-submit


    【解决方案1】:

    你没有对validateEmailAddress()的返回值做任何事情,试试这个:

    if (emailFromVal != 0) {
        if(!validateEmailAddress(emailFromVal)){
            return false;
        }
    } else {
        alert("Please provide your email address.");
        return false;       
    }
    

    另外,当电子邮件有效时,您需要从 validateEmailAddress() 返回 true:

    function validateEmailAddress(address) {
        filter = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,4})+$/;
        if (!filter.test(address)) {
            alert(address + ' - Is an invalid email address.');
            return false;
        }
        return true;
    }
    

    【讨论】:

    • 你真的帮了我大忙!非常感谢!
    【解决方案2】:

    validateEmailAddress 中的return false; 将仅从 validateEmailAddress 返回,而不是从封闭函数 (SendEmail) 返回。

    您的选择是:

    1. 检查validateEmailAddress的返回值 功能:

      如果(!validateEmailAddress(地址))返回false;

    1. 从 validateEmailAddress 抛出并从 封闭函数(这将允许错误传播到 堆叠到任意长度,直到你抓住它——也就是说,你没有 必须从封闭函数中捕获,但也从它的 调用者或调用者的调用者,依此类推)。

    【讨论】:

    • 你说得对,非常感谢!真的帮我解决了问题。
    猜你喜欢
    • 1970-01-01
    • 2018-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-01
    相关资源
    最近更新 更多