Rails表单同时包含AJAX和POST <input type =“submit”/>

时间:2015-10-05 18:33:33

标签: javascript ruby-on-rails ajax

此问题与this one非常相似,但我的问题并未完全解决。

所以我确实有一个带有许多按钮的表格。每个按钮都有一个不同的提交消息:使用rails submit_tag helper生成HTML,如

<!-- AJAX buttons -->
<input type="submit" value="Preview" name="commit">
<input type="submit" value="Send me a preview" name="commit">
<!-- POST buttons -->
<input type="submit" value="Send to me" name="commit">
<input type="submit" value="Send to all" name="commit">

表单最初是非AJAX,但我想通过顶部两个按钮通过AJAX提交。但是(并且在上述问题中没有解决这个问题),我还必须确保在参数中传递正确的提交消息。

使用像这样的代码

<% text = "Preview" # etc.
<%= submit_tag( text, 
        onclick: " 
            var form = $(this).closest('form');
            form.data( 'remote', 'true' );
            form.submit();
            form.removeAttr('data-remote');
            return false") %>

不起作用,因为调用form.submit()会在没有按下按钮的提交消息的情况下提交表单。

该表单应多次使用:示例场景

  • 用户想要发送可自定义的电子邮件
  • 用户填写表格,点击&#34;预览&#34;按钮(AJAX),这会产生快速预览。他可以根据需要重复多次。
  • 用户希望获得私人预览,他点击&#34;发送预览&#34;,以便他收到实际的电子邮件(仍然是AJAX)
  • 用户对所有内容感到满意,并希望发送电子邮件。因此,他点击了一个POST按钮,它将改变页面并显示确认消息

1 个答案:

答案 0 :(得分:0)

好的,这是我找到的解决方案

Rails视图(ajax这里只是一个布尔值,我们是否希望按钮在AJAX中执行)

<%= submit_tag( text, data: data, 
    onclick: (ajax ? "ajaxSubmit(event)" : ""), class: html_class) %>

javascript代码

function ajaxSubmit(e){
    e.preventDefault();
    var target = $(e.target)
    var form = target.closest('form')
    var tmp = form.data('remote')
    var input = $('<input />').attr('type', 'hidden')
        .attr('name', "commit")
        .attr('value', target.val())
        .appendTo(form);
    form.data('remote', true)
    form.submit()
    if(!tmp){
        form.removeAttr('data-remote');
    }
    input.remove()
    return false;
}