未捕获的ReferenceError:提交未定义

时间:2017-02-04 13:56:42

标签: javascript jquery html

我正在尝试仅在按下提交按钮时设置function(将提交的变量的整数值设置为1),但是我在控制台中收到此错误并且函数isn'在变量设置为1后运行:

  

未捕获的ReferenceError:未定义提交

$("form#form1").submit(function(event) {
      event.preventDefault();
      var submitted = 1; // set the integer value of the variable submitted to 1
});

if (submitted == 1) { // if the integer value of the varialbe is 1
   // run a function
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form id="form1">
  <input type="submit">
</form>

3 个答案:

答案 0 :(得分:2)

有两个问题:

  1. submitted是您submit处理程序的本地代码,因为您在处理函数中声明了它,因此无法在其外部访问它。

  2. 如果我们只修复#1,那么当if仍然具有我们在#1中提供的初始值时,您的submitted语句将会运行,它不会是来自submit处理程序,因为该处理程序尚未运行。相反,需要运行该代码以响应某些事件,因此 if 它在响应时运行的事件是在提交之后。

  3. 仅举例说明,这是一个通过点击按钮运行if的示例:

    var submitted = 0;
    $("form#form1").submit(function(event) {
          event.preventDefault();
          submitted = 1; // set the integer value of the variable submitted to 1
    });
    
    $("#btn").on("click", function() {
      if (submitted == 1) {
        $("<p>Submitted</p>").appendTo(document.body);
      } else {
        $("<p>Not yet submitted</p>").appendTo(document.body);
      }
    });
    

    Live on jsFiddle (Stack Snippets不允许提交表单,甚至不会取消提交。)

答案 1 :(得分:1)

您应该在提交操作的回调中直接调用函数:

$("form#form1").submit(function(event) {
  event.preventDefault();
  // run a function here
});

这样,在提交表单后立即调用该函数。

答案 2 :(得分:-1)

您的变量本地作用于提交函数。从一开始就将其设置为0,然后在提交表单时更改它。您必须对变量进行全局范围。

编辑:评论是正确的。我没有花一点时间来思考这个问题。我不确定,但我认为jQuery的提交处理程序只能在提交时运行,并且没有成功/错误处理函数;所以我要么使用不同的函数来处理它,要么只是将你的函数放在提交回调中,而不用担心submitted变量。