2011-12-31 5 views
8

이 주제에 대한 모든 SO 질문 및 답변을 탐색했지만 아직 시나리오를 작성할 수 없습니다. 드롭 다운 메뉴 옵션을 선택한 경우 클릭 동작을 트리거하려고합니다. 간단하고 AJAX와 매우 공통적이어야합니다.Ruby on Rails 양식에서 선택 및 변경하기

<%= 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 %> 
내가 사용

. ": : 리모콘 =>"사실은 "모두 형태와 그 AJAX 작업 얻을 수있는 유일한 방법이기 때문에 버튼 나는 또한 시도 여기

내 코드의 관련 발췌 "html_options"및 "javascript : 명시 적"및 "javascript : 없음"을 사용하고 난 후에도 도움이되지 않았다는 것을 보여주었습니다. 또한 onChange 대신 onClick을 시도했지만 onChange 대신 운이 좋았지 만 여전히 운이 없었습니다 ..

생성 된 HTML은 다음과 같습니다.

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

보시다시피 HTML 코드에는 onChange 이벤트 핸들러가 없습니다. 왜? 누구든지 내가 뭘 잘못보고있는거야?

도움 주셔서 감사합니다.

답변

14

이 같은 form.select에 전화를 수정

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

감사 rabusmar와 onchange를 사용하려고하지만 옵션 1을 선택하면, 컨트롤러는 값 2를 얻고, 그 반대의 경우도 마찬가지입니다. 세 번째 옵션을 추가했는데 컨트롤러가 방금 선택한 옵션이 아닌 것 같습니다. 왜이 일을하는거야? 나는 컨트롤러에 puts "@ test.Menu1 ="+ @ test.Menu1.to_s + "\ n"을 추가하여 이것을 점검했다. – rh4games

+0

양식을 보낼 때 값이 설정되지 않았기 때문입니다. 처리기에서'setTimeout'을 사용하여 올바른 값을 보낼 수 있습니다. – rabusmar

+0

인라인 JavaScript 대신이 파일 외부의 JavaScript를 참조하는 방법을 묻습니다. – Orz

3

당신의 문서 살펴보면 : 당신은 선택 폼 도우미 형식을 취 것을 볼 수

API Dock Ruby on Rails select

을 :

select (object, method, choices, options = {}, html_options = {})

옵션 해시를 전달하지 않은 경우 (이 경우 비어있는 해시 임) 양식에서 html_options 해시가 옵션 해시라고 생각하여 혼란 스럽습니다.

{: onchange => "alert ('Hello');"}와 같은 것을 추가하고 이벤트가 성공적으로 트리거되는지 또는 실제 웹 페이지에서 마우스 오른쪽 버튼으로 클릭하는지 확인하십시오. select 요소를 검사합니다. onchange 옵션이 html에 없다면, 레일스 양식 도우미가 실제로 html_options를 다른 옵션과 혼동하고 있음을 의미합니다. 그래서, 당신이해야하는지 :

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

은 HTML 옵션 전에 옵션에 대한 EMPTY HASH를 포함해야합니다 당신도 잘해야합니다. 나는 당신이 가지고있는 html_options와 javascript를 가질 필요가 없다고 생각한다.

마지막으로 onChange가 작동하지 않는 경우, 도움없이 자본 C.

+0

작동하지 않습니다. – Aravin