我有一个带有 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 调用提交操作是一个很好的解决方案,显然我错了。