0

ウェブサイトのいくつかのページのサイドバーにフォームがあります

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

上記のコードが正しく機能していないため、フォームが送信されません。助けてください。

4

2 に答える 2

0

入力された変数は $(form).each 内で宣言され、その外で使用されます

于 2012-08-20T08:34:50.623 に答える
0
  1. I think you should use $(this) instead of this on submitting.
  2. Maybe you should also check on the value comparison (see e.g. Check if inputs are empty using jQuery)

@amtanay: as far as I can see, the nesting is correct...

New Code (untested):

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

You could also think about submitting the form as soon as you find a non-empty field. There is no need to check on all the fields, if the form should be submitted even if it is only partially filled up.

于 2012-08-20T09:12:18.873 に答える