2015-10-05 38 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; 
} 
相關問題