2011-12-31 41 views
8

Tôi đã duyệt qua tất cả các câu hỏi và câu trả lời về chủ đề này nhưng tôi vẫn không thể làm cho kịch bản của mình hoạt động. Tôi muốn kích hoạt thao tác nút nhấp khi tùy chọn menu thả xuống được chọn; có vẻ đơn giản và rất phổ biến với AJAX.chọn và onChange trong biểu mẫu Ruby on Rails

Sau đây là các trích đoạn liên quan của mã của tôi:

<%= form_for(@test, :html => {:id => "form_id", :name => "MyForm", :remote => "true"}) do |form| %> 
    <%= form.label "Menu1" %> 
    <%= form.select (:Menu1, [["Option1","value1"],["Option2","value2"]], :html_options=>{:onChange=>"javascript: this.form.apply_button_name.click();"}) %> 

    <!-- more select menus and text fields here --> 

    <div class="actions"> 
     <%= form.submit "Apply", :name => "apply_button_name", :remote => "true" %> 
    </div> 
<% end %> 

tôi đã sử dụng. ": Từ xa => 'true' cả về hình thức và nút bởi vì đó là cách duy nhất để có được AJAX làm việc tôi cũng đã cố gắng có và không có "html_options" và "javascript:" rõ ràng, sau khi tôi duyệt qua một số câu trả lời SO đã đề xuất nhưng điều đó không giúp ích gì. Tôi cũng đã thử onSelect và onClick thay vì onChange, nhưng vẫn không có may mắn.

HTML là như sau:

Menu1 
    <select id="test_Menu1" name="test[Menu1]"><option value="value1">Option1</option> 
<option value="value2" selected="selected">Option2</option></select> 

Như bạn có thể thấy, không có trình xử lý sự kiện onChange trong mã HTML; TẠI SAO? Bất cứ ai đang nhìn thấy những gì tôi đang làm sai?

Cảm ơn bạn đã được trợ giúp.

Trả lời

14

Sửa đổi cuộc gọi của bạn để form.select, như thế này:

<%= form.select :Menu1, [["Option1","value1"],["Option2","value2"]], {}, 
       :onChange=>"javascript: this.form.apply_button_name.click();" %> 
+0

Cảm ơn rabusmar, đã giúp, nhưng khi tôi chọn OPTION1, bộ điều khiển được value2 và ngược lại. Tôi đã thêm một tùy chọn thứ 3, và có vẻ như bộ điều khiển không phải là tùy chọn mà tôi vừa chọn, nhưng cái trước đây! Tại sao nó làm điều này? Tôi đã kiểm tra điều này bằng cách thêm đặt "@ test.Menu1 =" + @ test.Menu1.to_s + "\ n" vào bộ điều khiển. – rh4games

+0

Đó là vì giá trị chưa được đặt khi biểu mẫu được gửi. Bạn có thể sử dụng 'setTimeout' trong trình xử lý để bạn gửi giá trị chính xác. – rabusmar

+0

Tôi có thể hỏi, làm cách nào để tham chiếu đến JavaScript bên ngoài tệp này, thay vì JavaScript nội tuyến ?? – Orz

3

Nếu bạn kiểm tra các tài liệu hướng dẫn cho:

API Dock Ruby on Rails select

Bạn sẽ thấy rằng các lựa chọn hình thức helper có dạng:

chọn (đối tượng, phương pháp, lựa chọn, tùy chọn = {}, html_options = {})

Nếu bạn không chuyển bất kỳ thứ gì cho băm tùy chọn (trong trường hợp của bạn, đây sẽ là băm rỗng), biểu mẫu cho rằng băm html_options của bạn là băm tùy chọn của bạn và bị nhầm lẫn.

Cách kiểm tra này là thêm thông tin như {: onchange => "alert ('Hello');"} và xem liệu sự kiện có kích hoạt thành công hay không, hoặc trong trang web thực sự của bạn, nhấp chuột phải vào phần tử chọn và kiểm tra nó. Nếu không có tùy chọn onchange nào hiện diện trong html, điều đó có nghĩa là helper form helper của bạn thực sự gây nhầm lẫn html_options với các tùy chọn khác. Vì vậy, những gì bạn nên có:

<%= form.select (:Menu1, [["Option1","value1"],["Option2","value2"]], {}, {:onChange=>"handler();"} %> 

BẢO ĐẢM để bao gồm các HASH trống cho OPTIONS TRƯỚC OPTIONS HTML VÀ BẠN NÊN BE FINE. Tôi không nghĩ rằng bạn thậm chí cần phải có những thứ html_options và javascript bạn có.

Cuối cùng, nếu onChange không làm việc, cố gắng sử dụng onchange không đòi hỏi vốn C.

+0

Nó không hoạt động. – Aravin

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