【问题标题】:JavaScript for form validation desn't seem to be getting called用于表单验证的 JavaScript 似乎没有被调用
【发布时间】:2014-04-20 05:00:14
【问题描述】:

我正在尝试使用 JavaScript 验证表单。当输入字段为空时,它会打印错误消息。我遇到的问题是代码在提交时没有触发。

http://jsfiddle.net/LHaav/

这里是 HTML 代码:

<head>
...
 <script type="text/javascript" src="./js/validate.js"></script>
....
</head>

...
      <form name="submitForm" method="post" id="submitBetaForm" onsubmit="return(validate())" action="validate.php" class="form-style">
        <label for="email">Email:</label>
          <input type="text" id="email-beta" name="email" placeholder="Enter Email"/>
        <label for="firstName">Name:</label>
          <input type="text" id="firstName" class="half-width" name="messageName"  placeholder="First name"/>
...

这是 JavaScript 代码:

function validate()
{
    var email = document.submitForm.email;
    var first = document.submitForm.firstName;
    var last = document.submitForm.lastName;
    var message = document.getElementById('warning');

    message.innerHTML = 'This is working!';

    var newLineCharNum = 0, poemContentArray = 0;
    //check to make sure that there is actually new line in the 
    //text area. Ensure that code doesn't blow up.
    if(textarea.value.match(/\n/g) != null)
    {
        newLineCharNum = textarea.value.match(/\n/g).length;
        poemContentArray = textarea.value.split("\n");
    }

    //check for email, firstName, lastName
    //focus puts the cursor on the element that needs to be corrected.
    var lineNum = newLineCharNum + 1;
    // if(email.value.length > 30)
    // {
    //     message.innerHTML = 'Email should be less than 30 character';
    //     title.focus();
    //     return false;
    // }
    else if(email.value.length == 0 || title == "")
    {
        message.innerHTML = 'Please enter your email';
        title.focus();
        return false;
    }
    if (firstName.value.length > 30)
    {
        message.innerHTML = 'First name should be less than 30 character';
        authorName.focus();
        return false;
    }
    else if(firstName.value.length == 0 ||authorName == "")
    {
        message.innerHTML = 'Please enter your first name';
        authorName.focus();
        return false;
    }
    if (lastName.value.length > 30)
    {
        message.innerHTML = 'Last name should be less than 30 character';
        authorName.focus();
        return false;
    }
    else if(lastName.value.length == 0 ||authorName == "")
    {
        message.innerHTML = 'Please enter your last name';
        authorName.focus();
        return false;
    }
}

这里是 PHP:

<?php 

session_start();

include('connection.php');

if(isset($_POST['SEND'])){

    //get information from the form
    $email = $_POST['email'];
    $first_name = $_POST['messageName'];
    $last_name = $_POST['messageLast'];
    $interest = $_POST['interest'];
    $country = $_POST['country'];

    // Check connection
    if ($con)
    {
        $insert_query = "INSERT INTO `user` (`id`, `first_name`, `last_name`, `interest`, `country`, `time`, `email`) 
        VALUES (NULL, '$first_name', '$last_name', '$interest', '$country', CURRENT_TIMESTAMP, '$email')";

        $con->query($insert_query);
        $con->close();
        echo "here";
    }
    else{
        echo "ERROR!";
    }

    //store informationn in the sessiont for later use
    $_SESSION['email'] = $email;
    $_SESSION['first_name'] = $first_name;
    $_SESSION['last_name'] = $last_name;
    $_SESSION['interest'] = $interest;
    $_SESSION['country'] = $country;

    }

?>

【问题讨论】:

  • 创建一个小提琴将使这个问题更容易回答。我知道这并不能直接回答您的问题,但您尝试执行的验证可以使用 HTML 属性 maxlengthrequired 来处理。您可能有不能使用这些属性的原因,但如果不是,则可能需要考虑。
  • 只是想一想,如何提交表单?如果你使用 form.submit();然后不调用 onsubmit 处理程序。您必须使用提交按钮并点击它!
  • @garethdn 感谢您的回复,这里是小提琴jsfiddle.net/LHaav
  • 如果代码在提交时没有触发,这意味着您的表单无论如何都会被提交,而不管验证应该阻止提交还是在任何情况下都没有提交表单?
  • @leandroico 有道理,但即使注释掉 action="validate.php" (将数据发送到数据库),当输入字段为空时,我仍然没有显示错误消息

标签: javascript jquery html forms validation


【解决方案1】:

事实证明,您的示例充满了错误的变量名和引用。例如,您在应该使用 first 时使用 firstNmae

我已经更正了其中的一些,并且显然可以正常工作:http://jsfiddle.net/LHaav/1/

您只需要注意浏览器控制台中的 JS 错误就可以了。 ;)

【讨论】:

    【解决方案2】:

    您的 Javascript 中存在一些问题 - 到处都是未定义的变量。但主要问题是你在那个小提琴中的 Javascript 根本没有被执行。如果您将表单处理程序更改为onsubmit="return validate()",您将看到 validate 未定义,尽管这可能取决于 JS 在小提琴中的加载方式。

    无论如何,为了缓解这个问题,将您的脚本移出头部并将其放在页面底部,就在关闭 body 标记之前。您至少现在有望使用 validate 方法。

    http://jsfiddle.net/LHaav/2/

    现在您必须处理所有未定义的变量。

    【讨论】:

    • 感谢您的回复。 “验证未定义”是什么意思?
    • 不管我的 js 有什么问题,都不应该用 var message = document.getElementById('warning'); 更新

      message.innerHTML = '这是有效的!';
    • validate is undefined 我的意思是你的 JavaScript 不知道 validate 是什么,因为当你的 onsubmit 回调试图执行时它还没有被定义。现在,就像我说的那样,这可能只是在小提琴中,而不是在您的代码中。您想要的行为正在我发布的小提琴中工作。不同之处在于我将其记录到控制台。在 Chrome 中按 F12 并转到控制台选项卡。提交您的表单(有效或无效),您将看到 This is working! 被登录。
    猜你喜欢
    • 2010-12-29
    • 1970-01-01
    • 2018-03-27
    • 1970-01-01
    • 2021-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多