2011-08-05 28 views
13

Tôi có Ajax làm việc, được xây dựng trong Rails javascript, với nút gửi. Tuy nhiên, tôi muốn nó gửi khi tôi thay đổi giá trị của hộp thả xuống và loại bỏ nút. Trong nghiên cứu của tôi, tôi tìm thấy những gì trông giống như các giải pháp chính xác nhưng tôi không nhận được yêu cầu đến máy chủ. Đây là mã hình thức thả xuống của tôi, lưu ý nó vẫn có nút gửi mà làm việc trước khi tôi nói thêm: onchange:Rails Đang cố gắng gửi biểu mẫu thay đổi danh sách thả xuống

<% form_tag('switch_car', :method => :put, :remote => true) do %> 
    <div class="field"> 
    <label>Car Name:</label> 
    <%= select_tag(:id, options_from_collection_for_select(active_cars, "id", "name"), 
     :onchange => ("$('switch_car').submit()"))%><%= submit_tag "Switch Car" %> 
    </div>  
<% end %> 

Đây là HTML được tạo:

<form accept-charset="UTF-8" action="switch_car" data-remote="true" method="post"> 
    <div style="margin:0;padding:0;display:inline"> 
    <input name="utf8" type="hidden" value="&#x2713;" /> 
    <input name="_method" type="hidden" value="put" /> 
    <input name="authenticity_token" type="hidden" value="PEbdqAoiik37lcoP4+v+dakpYxdpMkSm7Ub8eZpdF9I=" /> 
    </div> 
    <div class="field"> 
    <label>Car Name:</label> 
    <select id="id" name="id" onchange="$('switch_car').submit()"> 
     <option value="9">Truck</option> 
     <option value="10">Car</option> 
    </select> 
    <input name="commit" type="submit" value="Switch Car" /> 
</div> 

Cảm ơn trước sự giúp đỡ nào.

+1

Bạn đang sử dụng thư viện JavaScript nào? Của bạn: onchange có mã Ruby, nó phải là một cuộc gọi JavaScript. –

+0

@MauricioLinhares Tôi đang sử dụng thư viện cài đặt với Ruby on Rails 3. Vì vậy, tôi cần tìm ra cách gửi biểu mẫu thông qua javascript? – Xaxum

+0

Xin lỗi, @MauricioLinhares Tôi thấy những gì bạn đang nói. Tôi bây giờ đang cố gắng để có được đường ray để làm điều đó với một remote_function nhưng vẫn không có may mắn. Tôi nghĩ điều này khá phổ biến mặc dù tôi gặp khó khăn khi tìm một giải pháp. Tôi chỉ muốn gửi biểu mẫu trên lựa chọn? – Xaxum

Trả lời

5

Đây là những gì tôi có thể làm để làm cho nó hoạt động. Tôi đặt tên cho form_car bằng cách sử dụng: name => "switch_car" và sử dụng javascript sau đây.

:onchange => ("javascript: document.switch_car.submit();") 

Tôi vẫn đang tìm câu trả lời tốt hơn để tôi sẽ cập nhật nếu tôi tìm thấy điều gì đó. Điều này không sử dụng gửi .js vì lý do nào đó. Nó xử lý nó như HTML không giống như nút gửi sử dụng AJAX để chỉ cập nhật các phần tử trang thay đổi. Nhưng đây là điều tốt nhất tôi đã có thể tìm thấy cho đến nay.

5

Tùy thuộc vào thư viện js bạn đang sử dụng:

Prototype: :onchange => ("$('switch_car').submit()")

Jquery: :onchange => ("$('#switch_car').submit()")

Nếu bạn đang sử dụng giá trị mặc định và lan can của bạn phiên bản dưới 3.1, sau đó nguyên mẫu là mặc định thư viện.

+0

Cảm ơn. Tôi có phiên bản 3.0.9 nên tôi đã thử tùy chọn đầu tiên. Khi tôi thực hiện thay đổi trong hộp chọn, không yêu cầu nào được gửi đến máy chủ. Tôi đã cập nhật mã ở trên. Bất kỳ ý tưởng mà tôi có thể đã đi sai? – Xaxum

+0

vẫn không có may mắn với điều này. Không thể tìm ra lý do tại sao nó không gửi yêu cầu đến máy chủ? – Xaxum

+0

cài đặt firebug (plugin firefox) để gỡ lỗi và thử thực hiện javascript theo cách thủ công trên bảng điều khiển firebug để xem nó có hoạt động hay không. –

2

Một giải pháp tổng quát hơn sử dụng jQuery (Tôi không cần phải biết tên của mẫu) là:

onchange: "$(this).parent('form').submit();" 
15

Thay onchange của bạn với điều này,

onchange: "this.form.submit();" 
1

Đối với một select_tag, chỉ cần thêm:

{:onchange => "myHandler();" } 

nơi trình xử lý của bạn sẽ là:

this.form.submit(); 

Ngoài ra, nếu onchange không hoạt động bạn có thể muốn thử onChage với C.

vốn Cuối cùng, hãy chắc chắn để không nhầm lẫn một select_tag với một hình thức lựa chọn.

Xem câu trả lời của tôi cho một câu hỏi tương tự, chỉ liên quan đến một hình thức chọn

Adding An Onchange Event To A Form Select

+1

Xin lỗi, nhưng bạn đang rối tung lên 'chọn' với' select_tag'. Chữ ký của 'select_tag' là ở đây: http://apidock.com/rails/v4.1.8/ActionView/Helpers/FormTagHelper/select_tag và chỉ có ** một ** tham số tùy chọn. Ví dụ mã của bạn thực sự tạo ra lỗi. –

+0

Cảm ơn Martin bạn là chính xác, tôi sẽ làm cho một sự phân biệt giữa hai người. – AmitF

2

này dường như đã được khoảng một thời gian nhưng, tôi sẽ đăng những phát hiện của tôi anyway kể từ khi tôi đã không tìm thấy lời giải thích này ở bất cứ đâu.

Tôi đã xem qua số này article mô tả khá tốt vấn đề khi kích hoạt yêu cầu ajax thông qua phương thức submit() (có hoặc không có jQuery hoặc Handler). Tác giả sau đó đề xuất để tạo yêu cầu AJAX của riêng bạn.Điều đó không bắt buộc và không nên được thực hiện để sử dụng logic trong phạm vi rails.js (đá quý jquery-jus).

Các sự cố khi kích hoạt submit() xảy ra theo cách thủ công vì rails.js liên kết và nghe một sự kiện có tên là submit.rails. Để kích hoạt việc sử dụng bản trình bày theo cách thủ công

onchange: 'javascript: $(this).trigger("submit.rails") 

trên phần tử hoặc biểu mẫu.

Các vấn đề liên quan