1

我有一个带有 id 的 link_to 表单助手:

<%=  link_to "NEXT", next_wizard_path, :method => :put, :id => 'my-link-check' %>

我希望此链接提交页面上的表单(它实际上是部分的,但在呈现时它的全部一页并不重要)。所以我在标题部分的顶部放了一些jquery:

<script>

$(document).ready(function() {
    $('#my-link-check').click(function(event){
    var form = document.getElementById("edit_put");
    if(form!=null)
        form.submit();
    //event.preventDefault(); // Prevent link from following its href, dont think we want this
    });
}); 
</script>

奇怪的是,form.submit 确实有效,如果我在 firebug 中设置了断点并专门单步执行代码,如果我不这样做,它会运行代码但提交实际上不起作用。我很困惑发生了什么,或者为什么会这样。我怀疑它是如何使用 jquery 调用的,因为我根本不精通 jquery。

我应该注意,这是为了将数据保存在wicked提供和帮助的表单上,这是 ruby​​ on rails 的向导宝石。

我还应该注意到 wicked 的作者建议在“向导页面”之间保存数据,以便在通过 ajax 触摸表单时异步提交数据:

def update

# save logic here

  respond_to do |format|
    format.js do
    # whatever
  end
  format.html do
     render_wizard
  end
end

虽然我不知道,但在我们看来是不是让 form_for 成为 remote => true ?我怀疑它比这更复杂。

我还尝试让 link_to 方法成为 put 方法,这确实调用了控制器中的 Update 操作,但它没有传递任何信息,因此它没有保存任何表单更改……这就是为什么我认为通过 javascript 调用提交操作是一个很好的解决方案,显然我错了。

4

2 回答 2

1

你为什么注释掉event.preventDefault();一行?my-link-check带有id的链接是否指向实际地址?

看起来浏览器刚刚更改(或重新加载)页面,脚本执行被终止。有了断点,一切顺利。

尝试取消注释event.preventDefault();或放在return false;后面form.submit();

于 2012-11-27T18:41:27.613 回答
0

我怀疑 jQuerysubmit只适用于 jQuery 对象,所以它应该是这样的:

$(document).ready(function() {
    $('#my-link-check').click(function(event){
    var form = $("#edit_put");
    if(form!=null)
        $(form).submit();
    });
}); 
于 2012-11-27T16:53:36.383 回答