2015-10-05 89 views
-2

这个问题与this one非常相似,但我的问题没有完全解决。AJAX和POST的Rails表单<input type = submit>

所以我确实有一个很多按钮的形式。每个按钮都有不同的提交信息:使用Rails submit_tag辅助生成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()将提交表单没有按钮提交信息被按下。

形式是指被多次使用:的示例场景

  • 用户想要发送自定义的电子邮件
  • 用户填写表单,点击“预览”按钮( AJAX),这会产生一个快速预览。他可以根据需要多次重复。
  • 用户想获得一个私人预览,他点击“给我一个预览”,所以他收到的实际电子邮件(仍然AJAX)
  • 用户是幸福的一切,并希望发送电子邮件。因此,他点击了POST按钮,将改变页面,并显示一条确认消息
+0

解释downvotes,恳求即我不明白这个问题是如何违反准则的? –

回答

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; 
} 
相关问题