2013-01-23 41 views
3

我确信这应该很容易,但我无法正常工作。当电子邮件有效时动态显示提交按钮

HTML

<label for="email">Enter email for updates:</label> 
<input type="text" name="email" id="email" placeholder="[email protected]" /> 
<button name="submit" type="submit">Submit</button> 

JS

$(document).ready(function() { 

    $('button').hide(); 

    $('input').keyup(function() { 
    if(!validateEmail(email)){ 
     $('button').show(); 
    } 
    }; 

    function validateEmail(email) { 
    var emailReg = /^([\w-\.][email protected]([\w-]+\.)+[\w-]{2,4})?$/; 
    return emailReg.test(email); 
    } 

}); 

我不希望它成为最好的电子邮件验证,而只是一个简单的方式向用户展示的形式时,向右看。

感激地收到任何帮助。

+0

松开你的正则表达式。电子邮件可以是[email protected]或[email protected]。在@之后可能找到另一个'[\ w - \。] +'。 –

+1

为什么在电子邮件无效时显示按钮? – danronmoon

回答

6

5问题:

  1. 语法错误(你应该在你的console看看当事情不工作)
  2. 你不把按钮消失,当输入无效再
  3. 你真的不测试输入(感谢礼)
  4. 你不选中“电子邮件”不为空
  5. 一些有效的电子邮件是由你的正则表达式拒绝(试行"valid email"@example.com

我的前四个问题的建议:

$('button').hide(); 
    $('input').keyup(function() { 
    if(validateEmail($(this).val())){ 
     $('button').show(); 
    } else { 
     $('button').hide(); 
    } 
    }); 

    function validateEmail(email) { 
    if (!email) return false; 
    var emailReg = /^([\w-\.][email protected]([\w-]+\.)+[\w-]{2,4})?$/; 
    return emailReg.test(email); 
    } 

Demonstration

对于最后一个问题,我建议你阅读Stop Validating Email Addresses With Your Complex Regex

+0

虽然这不是。变量'email'没有设置在任何地方。所以他对'validateEmail'的调用不起作用。 'validateEmail($('#email').val())'然后我们在说话!随意编辑您的答案以包含此更改。如果没有,我会提交另一个答案作为参考。 –

+0

@EliGassert你说得对。我建议你建立一个答案。 –

+0

+1不错的更新。这似乎是最完整的答案。 –

3

协助什么dystroy说,有一个语法错误。但是,另外,拨打validateEmail时,您不会设置变量email。根据史蒂夫的评论,我还让核心更具体。这是更新的代码。

$('#email').keyup(function() { 
    var email = $(this).val(); 

    if(validateEmail(email)){ 
     $('button[type="submit"]').show(); 
    } 
    else { 
     $('button[type="submit"]').hide(); 
    } 

    }); 
+0

+1,因为我看起来不够;) –

+0

当电子邮件有效时,validateEmail方法返回true,所以您的逻辑被反转。另外,为什么要验证何时将文本输入到其他输入字段? – Fenton

+0

我只是修改了那里的内容,但我同意你的看法。我会修改答案以使其更加正确。 –

0

感谢dystroy,礼Gassert & danronmoon。你们指出的大量不同的错误。为了将来的参考,这是来自你现在适用于我的不同修复程序的代码:

$('button').hide(); 

$('input').keyup(function() { 
    var email = $('#email').val(); 

    if(validateEmail(email)){ 
     $('button').show(); 
    } else { 
     $('button').hide(); 
    } 
}); 

function validateEmail(email) { 
    var emailReg = /^([\w-\.][email protected]([\w-]+\.)+[\w-]{2,4})?$/; 
    return emailReg.test(email); 
} 
相关问题