如果填写字段,则调用表单提交事件

时间:2012-08-20 08:24:30

标签: jquery forms submit bind onbeforeunload

我在我的网站的几页上有一个侧边栏的表格

<form id="test1" name="test1">
 <label for="fname">First Name:</label>
 <input type="text" name="fname" id="fname" />

 <label for="lname">Last Name:</label>
 <input type="text" name="lname" id="lname" />

 <label for="comment">Comment:</label>
 <textarea name="comment" id="comment"><textarea/>

 <input type="submit" />
</form>

我的要求很奇怪。如果有人填写表格(甚至部分)然后离开当前页面(通过转到其他页面,或关闭浏览器标签/窗口),则应提交表格。

我正在使用以下jQuery代码来实现以下目标:

<script>
$(window).bind('beforeunload', function(){
    $('form').each(function(index) {
    var filled = false;
    $(this).find("input").each(function() {
        if ($(this).val() != "") {
            filled = true;
        }
    });
    if (filled) { this.submit(); }
});
return confirm('test');
});

以上代码无法正常运行,表单未提交。请帮助。

2 个答案:

答案 0 :(得分:0)

变量填充在$(form).each中声明并在其外部使用

答案 1 :(得分:0)

  1. 我认为你应该在提交时使用$(this)代替。
  2. 也许你还应该检查价值比较(参见例如Check if inputs are empty using jQuery
  3. @amtanay:据我所知,嵌套是正确的......

    新规范(未经测试):

    $(window).bind('beforeunload', function(){
      $('form').each(function(index) {
        var filled = false;
        $(this).find("input").each(function() {
          if ($(this).val() != "") {
            filled = true;
          }
        });
        if (filled) { $(this).submit(); }
      });
      return confirm('test');
    });
    

    您还可以考虑在找到非空字段后立即提交表单。如果表格应该提交,即使只是部分填写,也无需检查所有字段。