2011-12-20 25 views
13

Trong ứng dụng ray của tôi, tôi có một hình thức từ xa trông giống như thế này ví dụ:nộp một đường ray hình thức từ xa với javascript

<%= form_tag some_path, :method => :get, :id => 'my-form', :remote => true do %> 
    <%= text_field_tag :search, params[:search], :id => 'search-field' %> 
    <%= submit_tag 'Go' %> 
<% end %> 

Bây giờ tôi muốn gửi biểu mẫu này qua javascript và kích hoạt tất cả các đường ray hình thức từ xa callbacks. Cho đến nay tôi đã thử một vài điều nhưng không có gì có vẻ là làm việc.

Những điều tôi đã cố gắng:

$('#my-form').trigger('onsubmit') 

$.rails.callFormSubmitBindings($('#search-form')) 

nhưng không may mắn cho đến nay. Bất kỳ ý tưởng?

+1

Còn về '$ (" # my-form "). Submit()'? Nó có kích hoạt các callback cần thiết không? Tôi biết tôi đã sử dụng tương tự trong [mã của riêng tôi] (https://github.com/BinaryMuse/BG-Tracker/blob/01a958924fc8cc67c0effa340e72ede43298b8fd/app/assets/javascripts/battlegroups.js.coffee#L5). –

+0

Có nó! : P – Matthew

Trả lời

7

Bạn chỉ có thể sử dụng .submit();

$("#my-form").submit(); 
+0

Ya điều này làm việc hoàn hảo. Đơn giản hơn nhiều so với tôi đang nghĩ ... – Matthew

+6

Chỉ muốn thêm rằng nó phải được gọi trên một đối tượng jQuery. Ví dụ nếu bạn làm một cái gì đó như '$ ('. A'). Change (function {this.submit()})' nó sẽ không hoạt động. Bạn phải đóng gói 'this' trong một đối tượng jQuery như' $ (this) '. Sau đó, bạn có thể gọi sumbit về điều đó. –

+2

Cảnh báo: Biểu mẫu sẽ KHÔNG được gửi một cách xa xôi (bằng ajax). Thay vào đó, việc làm mới hoàn toàn sẽ xảy ra – Fred

1

Làm thế nào để truyền json từ bộ điều khiển và chụp bằng js của bạn.

Bây giờ, hành động điều khiển như

respond_to do |format| 
     if some condition 
     format.json { render :json => {:success => true} } 
     format.html{ redirect_to some_path, :notice => "successfully created" } 
     else 
     ... 
     end 
end 

Và chụp json trong js như

$('#my-form').bind 'ajax:success', (event,data) -> 
    if(data.success == true) 
    ... 

Không chính xác những gì bạn đang tìm kiếm nhưng hy vọng điều này hóa ra là của bất kỳ sự giúp đỡ.

+1

Tôi tin rằng anh ấy chỉ đơn giản là hỏi cách gửi biểu mẫu. – andrewpthorp

+0

sẽ không tự động gửi biểu mẫu từ xa tới 'some_path' như đã nêu. – Abhaya

46

này chỉ đơn giản là trong Rails cách:

$("#myform").trigger('submit.rails'); 
+2

Đây là câu trả lời thực sự. Nó bảo vệ ajax gửi hành vi của một hình thức từ xa. Cảm ơn ! – Fred

+0

bạn được chào đón! –

+1

Hãy chú ý đến Ismael: Bạn phải bọc biểu mẫu của bạn trong một đối tượng jQuery cho hành vi gửi từ xa. Vì vậy, không phải 'myForm.submit()', nhưng '$ (myForm) .submit()'. Tôi đã không phát hiện ra vấn đề trong một thời gian ... – NobodysNightmare

18

Trong Rails 5.1 trở lên, thay thế cái cũ jquery-ujs với một tổ chức phi jquery rails-ujs, việc các câu trả lời ở trên không còn, luôn luôn gửi biểu mẫu qua một HTML HTTP yêu cầu. Đây là cách bạn kích hoạt các đường ray mới gửi trình xử lý sự kiện:

var elem = document.getElementById('myform') // or $('#myform')[0] with jQuery 
Rails.fire(elem, 'submit'); 

(Không thể cho bạn biết mất bao lâu để tôi tìm ra điều đó ...) Vì một số lý do, các sự kiện thông thường không bong bóng lên đúng cách để xử lý sự kiện được ủy nhiệm attached by rails sử dụng đường ray mới delegate function, khi chúng được kích hoạt bởi jQuery.

+4

THX! Điều này sẽ đưa tôi mãi mãi để tìm ra .. – ErwinM