0

simpleImageCheck プラグインを使用していますが、何らかの理由でフォームが 2 回送信されます。

以下は私のjavascriptです:

<script type="text/javascript" language="javascript">
$(function() {
$('#pin_candle').simpleImageCheck({
    image: '/images/candle.png',
    imageChecked: '/images/one.png'
  })
$('#pin_rose').simpleImageCheck({
    image: '/images/rose.png',
    imageChecked: '/images/one.png'
  })
});
</script>

これが私のレールフォームです:

<%= form_for([@posts, @pin], :remote => true, :html => { :id => 'pinform' }) do |f| %>

  <%= f.check_box :candle, :onChange => "this.form.submit_button.click();" %>

  <%= f.check_box :rose, :onChange => "this.form.submit_button.click();" %>

  <%= f.submit :id => 'submit_button', :style => 'display: none;' %>
<% end %>

this.form.submit_button.click(); を使用する必要があります。標準の this.form.submit(); を使用するだけだからです。js ではなく html で送信されるため、Rails では ajax 呼び出しを実行できません。

もう1つの問題は、送信後にフォームを無効にすると、他のチェックボックスがあり、他のチェックボックスが機能しないことです。

何か案は?

二重送信を止める方法はありますか?

ありがとうございました。

4

2 に答える 2

0

フォームが js 形式で送信されない場合は、form_tag とともに :format => :js を使用し、onclick イベントを this.form.submit() に変更してみてください。

于 2012-08-08T10:53:05.297 に答える
0

ビューを次のように変更します -

<%= form_for([@posts, @pin], :remote => true, :html => { :id => 'pinform' }) do |f| %>
  <%= f.check_box :candle %>
  <%= f.check_box :rose %>
  <%= f.submit :id => 'submit_button'%>
<% end %>

そしてスクリプトブロックで

 $("#pinform_candle").change(function () {
           submit_candle_or_rose("candle");
 });

 $("#pinform_rose").change(function () {
           submit_candle_or_rose("rose");
 });


 function submit_candle_or_rose(candle_or_rose)
 {
        $.ajax({
                        url: "/posts/pin?format=js&candle_or_rose="+ candle_or_rose,
                        beforeSend: function() {
                               //do something
                        },
                        success: function() {
                               alert("saved successfully");
                        },
                        error: function() {
                               alert("something failed");
                        }
         });
  }
于 2012-07-15T07:44:54.553 に答える