【问题标题】:How to use onClick ONLY if email input field is valid?如果电子邮件输入字段有效,如何仅使用 onClick?
【发布时间】:2013-03-21 16:50:51
【问题描述】:

代码如下:

<input id="subscribe-email" type="email" placeholder="john.doe@example.com" />
            <button type="submit" id="subscribe-submit" onClick="javascript:omgemailgone();" />

如何仅在电子邮件有效时检查和运行 JS 函数(由用户代理验证,无需额外验证)?

更新。 新的浏览器可以自己验证input=email,也有伪类:valid 和:invalid。仅当浏览器“知道”该电子邮件有效时,我才需要运行功能。

【问题讨论】:

    标签: javascript html validation


    【解决方案1】:

    您可以使用输入元素(在本例中为电子邮件输入字段)的.checkValidity() 方法。这将返回一个布尔值,指示输入是否有效。 这是一个可以玩的小提琴:

    http://jsfiddle.net/QP4Rc/4/

    还有代码:

    <input id="subscribe-email" type="email" required="required" placeholder="john.doe@example.com" />
    
    <button type="submit" id="subscribe-submit" onClick="check()">
    click me
    </button>
    
    function check()
    {
      if(!document.getElementById("subscribe-email").checkValidity())
      {
    
        //do stuff here ie. show errors
        alert("input not valid!");
    
      }else
      {
          callMeIfValid();
      }
    }
    
    function callMeIfValid()
    {
      //submit form or whatever
      alert("valid input");
    }
    

    【讨论】:

    • 谢谢,但不,不起作用。返回警报但也运行其他东西。在 JSFiddle 中甚至没有警报。 link
    • 您在哪个浏览器中测试?我在 Chrome、Firefox 和 Safari 上检查了我的小提琴,并且警报显示得很好。如果您希望某些代码仅在电子邮件字段有效的情况下运行,您应该在 else 条件中添加代码。我会更新代码和小提琴。
    • Chrome,IE10,Opera 12。确实,我解决了我的问题,只是将
    • 太好了,很高兴听到你让它工作了。请考虑接受答案,这样这个问题就不会悬而未决!
    【解决方案2】:

    检查Validate email address in JavaScript? 进行验证,然后将其实现到您的 omgemailgone 方法中的 if 语句中(如果有效则继续,否则不执行任何操作)

    编辑:

    function validateEmail(email) { 
        var re = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\
    ".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA
    -Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
        return re.test(email);
    }
    

    来自链接

    【讨论】:

    • 对不起,我的问题好像没有问清楚。新浏览器会自行验证 input=email。仅当浏览器“知道”该电子邮件有效时,我才需要运行功能。
    • 那么您是否正在寻找一种访问验证值的方法?
    • 如果是在表单中,在输入有效的电子邮件之前,提交按钮不会执行任何操作。
    • 嗯,它是 onClick。无论电子邮件是否有效,onClick 事件都会起作用并启动该功能。我尝试了@Bigood 的解决方案,但它总是返回语法错误,即使我改变了模式。
    • 所以只使用没有 onClick 的提交并通过 POST 传递表单信息不是一个选项?嗯,我不确定。您是否看过我和 Mun Mrd 所关联的问题的答案?我在原始帖子中添加了不同的正则表达式。确保你没有遗漏一些愚蠢的东西,比如括号。如果您找到一种访问浏览器的“isValid”方法的方法,请告诉我。
    【解决方案3】:

    您可以使用Regular expressions 来检查您的omgemailgone() 上的电子邮件是否有效:

    function omgemailgone (){
       var mail = $('#subscribe-email').val();
    
       //Example of regular expression
       if(mail.match(/YourRegexp/)
       {
          //Do stuff
       }
       else alert("Invalid e-mail");
    
    }
    

    (这里使用 jQuery)

    【讨论】:

    • 对不起,我的问题好像没有问清楚。新浏览器会自行验证 input=email。仅当浏览器“知道”该电子邮件有效时,我才需要运行功能。
    • 除此之外,您 (1) 忘记了正则表达式周围的斜线和 (2) 正则表达式与“marketing@skd.museum”等有效地址不匹配。
    • 我找到了 RFC2822 验证模式,添加了斜杠,但似乎与斜杠有冲突。这是快照s3.hostingkartinok.com/uploads/images/2013/03/…
    【解决方案4】:

    你需要一个验证电子邮件并返回 true 或 false 的函数 Validate email address in JavaScript?

    <button type="submit" id="subscribe-submit" onClick="javascript:validateEmail(document.getElementById('subscribe-email').value) ? omgemailgone() : alert('email is wrong dude');" />
    

    这是一个快速的解决方案,我建议你正确地做,不要使用内联 onclick js

    【讨论】:

    • 对不起,我的问题好像没有问清楚。新浏览器会自行验证 input=email。仅当浏览器“知道”该电子邮件有效时,我才需要运行功能。
    • html5 type=email 在 Safari 中不兼容。这样一来,每个人都可以通过下载 safari 来通过这层防御... javascript 可以关闭所以我建议使用 php 验证尽可能安全
    猜你喜欢
    • 2019-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 2023-04-03
    • 2021-12-27
    • 1970-01-01
    相关资源
    最近更新 更多