【问题标题】:Validation - if statement not working验证 - 如果语句不起作用
【发布时间】:2013-01-03 15:46:50
【问题描述】:

我正在尝试使用 Javascript 进行简单的表单验证。在这种情况下,我有一个电子邮件文本输入,如果电子邮件不是有效的电子邮件或电子邮件地址已被占用,我希望它出错。有效的电子邮件部分错误正常,但电子邮件地址已被参与总是通过。

这是我的脚本代码

<script src="http://code.jquery.com/jquery-latest.min.js"></script>
<script>
function valemail() 
{
var email = $('input#email').val();
var atpos=email.indexOf("@");
var dotpos=email.lastIndexOf(".");
if (atpos<1 || dotpos<atpos+2 || dotpos+2>=email.length)
    {
    document.getElementById("email").style.border="3px solid red";
    document.getElementById('email_error').style.display = 'block'; 
    document.getElementById('email_error').innerHTML = 'A valid email address is required';
    } else {
if ($.trim(email) != '') 
{

    $.post('../ajax/registeremail.php', {email: email}, function(data) 
    {
        if ($.trim(data) == 'That email address is already in use. If you have created an account, 
<a href="../login.php">Login</a>') 
        {
            document.getElementById("email").style.border="3px solid red";
            document.getElementById('email_error').style.display = 'block'; 
            $('div#email_error').text(data);
        } else {
            document.getElementById("email").style.border="3px solid #33FF33";
            document.getElementById('email_error').style.display = 'none'; 
        }
    });
   }
}}
 </script>

我的 registeremail.php 文件可以独立运行,并且是:

<?php
include('../init.php');
//email validation
if (isset($_POST['email']) === true && empty($_POST['email']) === false) {
$email = $_POST['email'];

if (email_exists($email) === true) {
echo('That email address is already in use. If you have created an account, <a>Login</a>');
} else {
echo('Good');
}
?>

实际的文本输入和div代码是

      <input class="input" type="text" tabindex="2" placeholder="Email*" style="height:20px;" name="email"  
id="email" onchange="valemail()">
<div id="email_error"></div>

有人知道为什么会这样吗?我真的很困惑。

【问题讨论】:

  • 打开控制台查看是否有错误。
  • 为什么不使用真正的jQuery?看起来像是香草 JS 和 jQ 的奇怪组合......
  • 比较一个变量和一个字符串字面量(尤其是那个长的)很可能会以泪水告终。在这些情况下使用 boolean 或 int 类型。

标签: php javascript jquery validation if-statement


【解决方案1】:

问题是你在 PHP 中回显的是

That email address is already in use. If you have created an account, <a>Login</a>

你在 JavaScript 中检查的是

That email address is already in use. If you have created an account, <a href="../login.php">Login</a>

即他们不一样...

我建议你返回 1 (true) 或 0 (false) 然后使用 JavaScript 输出文本.. 类似的东西

if (email_exists($email) === true) {
   echo('0');
} else {
   echo('1');
}

那么你的 JavaScript 会是这样的

if ($.trim(data) == '0') {
    document.getElementById("email").style.border = "3px solid red";
    document.getElementById('email_error').style.display = 'block';
    $('div#email_error').text('That email address is already in use. If you have created an account,<a href="../login.php">Login</a>');
} else {
    document.getElementById("email").style.border = "3px solid #33FF33";
    document.getElementById('email_error').style.display = 'none';
}

【讨论】:

  • oops 对不起 ManseUK,不知道您发布的是相同的解决方案,否则我不会提交
  • @mongy910 进行一些调试 - 我建议使用 firebug - 然后您可以看到 PHP 的响应并逐步执行代码 - 随时检查变量值。我的答案不应该是一个可行的解决方案 - 只是一个指向正确方向的指针,因此是 something like
  • 天哪,这对我的帮助比任何答案都多!我安装了萤火虫并进入控制台,它立即告诉我我的错误是什么!原来我在 registeremail.php 的末尾缺少了一个 }。非常感谢!!!!!!
【解决方案2】:

我建议您更改您的 javascript 逻辑以检查是否缺少“良好”响应,而不是检查您可能没有完全复制的冗长错误消息。改为:

$.post('../ajax/registeremail.php', {email: email}, function(data) 
{
    if ($.trim(data) != 'Good') 
    {
       ...

这既可以防止与您的错误消息不完全匹配的问题,也可以让您修改该错误消息或创建其他错误,而无需更改您的错误检测代码。

【讨论】:

    猜你喜欢
    • 2012-12-26
    • 2013-06-20
    • 2013-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多