Javascript JQuery on(“提交”)在第一次单击时未执行

Javascript JQuery on(“提交”)在第一次单击时未执行,javascript,php,jquery,html,Javascript,Php,Jquery,Html,我正在使用JQuery在提交表单后测试输入的大小: <!DOCTYPE html> <html lang="en"> <head> <title>Page 1</title> <meta charset="utf-8"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script&

我正在使用JQuery在提交表单后测试输入的大小:

<!DOCTYPE html>
<html lang="en">
<head>
  <title>Page 1</title>
  <meta charset="utf-8">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>

</head>

<body>
 <form method="post" action="essai.php">
    <input type="text" name="mail" id="email" placeholder="mail"/><br />
    <input type="submit" name="submit" value="Validate" />
 </form>

   <?php

        if (isset($_POST['submit'])){
            echo($_POST['mail']);
            if(isset($_POST['mail'])){
                $data=789;
            }

        }


    ?>

  <script>

    $(function(){
        var data = <?php echo json_encode($data); ?>;
        $("form").on("submit", function() {

            if(data.toString().length < 4) {

                alert(data);
                return false;

                }

        });
      });
</script>

</body>
</html>

第1页

$(函数(){ var数据=; $(“表格”)。在(“提交”,函数()上{ if(data.toString().length<4){ 警报(数据); 返回false; } }); });
问题是警报(例如,如果我只输入1个字符)不会在第一次提交后弹出,而只在其他提交后弹出


谢谢

首先,在JavaScript中嵌入PHP代码是非常不安全的。我想不出为什么要在客户端使用服务器端代码。另一种选择是,从PHP回显javascript代码,而不是相反

现在您的问题出现了,因为第一次加载页面时,没有发布任何内容。您有一些代码块,只有在发布某些内容后才会执行。如果您的PHP脚本可能显示错误,您将在第一次加载代码时看到一个
未定义变量
通知。您可以通过在条件中使用变量之前声明变量来解决此问题:

     $data = 0; // Initialize variable here

    if (isset($_POST['submit'])){
        echo($_POST['mail']);
        if(isset($_POST['mail'])){
            $data=789;
        }

    }

因为当您第一次访问页面时,
var data
将为空。@arisaila但是当我提交表单时,POST变量不是空的,对吗?然后在我的代码中,它应该被传递var数据(实际上是这样),问题是它没有进入函数“$”(“form”)。在(“submit”,function()`谢谢,但问题仍然是一样的,我没有检索到
$\u POST['submit']的值
当我在页面加载后第一次单击时,我现在理解的是,PHP在服务器端执行,Javascript在客户端执行。我的问题是,onsubmit JQuery函数在PHP执行之前执行,所以我想我需要另一个JQuery函数,即“wait”在它收到$_postvalue..@aurelSon之前,我认为您还没有尝试过我的代码。我在本地执行了它,它的工作方式完全符合您的要求。即使在页面重新加载之前,您第一次单击时也会发出警报。您注意到变量初始化了吗?