【问题标题】:call up form submit event if fields are filled如果字段已填写,则调用表单提交事件
【发布时间】:2012-08-20 08:24:29
【问题描述】:

我网站的几个页面的侧边栏中有一个表单

<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');
});

以上代码无法正常工作,表单未提交。请帮忙。

【问题讨论】:

    标签: jquery forms submit bind onbeforeunload


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:
      1. 我认为您应该在提交时使用 $(this) 而不是 this。
      2. 也许您还应该检查值比较(参见例如Check if inputs are empty using jQuery

      @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');
      });
      

      您也可以考虑在找到非空字段后立即提交表单。如果表格只填了一部分,也不需要检查所有字段。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-04-01
        • 2011-06-08
        • 2021-08-17
        • 2023-04-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多