0

Railsでコメントを送信するためにリモートフォームを使用しています。このリモートフォームを使用しているため、ユーザーは新しいページに送られるべきではありません。

「送信」を押すと、ステータスがフェードインして「送信していただきありがとうございます」と表示され、フォームがクリアされるようにしたいと思います。それでも、私は自分の人生でこれを行う方法を理解できません。

$('form').submit -> を実行してからテキスト領域をクリアすると、実際に送信を完了する前にテキスト領域がリセットされるため、Rails で空白の送信が行われるという問題があります。

Rails 3.2、Coffeescript、および Jquery を使用しています。

4

4 に答える 4

1

フォームが送信されたときにこれを実行したいのかもしれませんが... jQuery のバインド (またはライブ) メソッドを使用して、成功が返されるのを待ちます。

$('#submit_button')
  .live('ajax:success', clearForm)
  .live('ajax:success', notifyUser)

成功に関係なく、またはリクエストのどの段階でも実行したい場合は、他の利用可能な ajax コールバック「beforeSend」、「complete」、「error」などを確認してください。

于 2012-04-13T00:23:03.230 に答える
1

DanS の回答のバリエーション:

$('form').submit (e) ->
  e.preventDefault() # prevent form submitting multiple times
  $.post(@action, $(@).serializeArray()).done -> # manually submit the form
    $(@).find('input').each -> @reset() # afterwards clear the form
  return

ajax 呼び出しの後に完了コールバックを追加しました。これにより、フォームをクリアする前に ajax が完了するまで待機する必要があります。

于 2012-04-23T07:19:28.073 に答える
0

フォームを送信すると、新しいページ読み込まれます。ユーザーを同じページにとどめ、フォームデータを送信する場合は、フォームを手動で送信する必要があります。

$('form').bind 'submit', (e) ->
    e.preventDefault() # don't send the user to a new page
    $.post this.action, $(this).serializeArray() # manually submit formdata to form url
    $(this).find(':input').each -> this.reset() # reset all fields in the form

(私は上記をテストしていません、うまくいけばエラーはありません)

于 2012-04-13T12:02:52.493 に答える
0

これはうまくいくはずです:

$('form').submit (e) ->
  e.preventDefault() # prevent form submitting multiple times
  $.post @action, $(@).serializeArray() # manually submit the form
  $(@).find('input').each -> @reset() # afterwards clear the form
  return

そして、次の JavaScript を生成します。

$('form').submit(function(e) {
  e.preventDefault();
  $.post(this.action, $(this).serializeArray());
  $(this).find('input').each(function() {
    return this.reset();
  });
});
于 2012-04-12T22:24:49.530 に答える