0

我正在使用 simpleImageCheck 插件,由于某种原因,表单提交了两次。

下面是我的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(); 它以 html 提交,而不是 js,所以 rails 不会让我进行 ajax 调用。

另一个问题是如果我在提交后禁用表单,我还有其他复选框,那么其他复选框不起作用。

有任何想法吗?

有没有办法阻止重复提交?

谢谢你。

4

2 回答 2

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 回答
0

如果您的表单不是以 js 格式提交,请使用 :format => :js 和 form_tag 并尝试将 onclick 事件更改为 this.form.submit()

于 2012-08-08T10:53:05.297 回答