2009-02-25 2 views
12

드롭 다운 상자 옵션을 선택한 경우 AJAX 양식을 자동 제출하는 가장 쉽고 가장 우아한 방법은 무엇입니까? 관리자가 사용자 권한 (여기서 "권한"은 정수로 저장 됨)을 수정할 수있는 관리 페이지를 만들고 있는데, "권한"필드는 관리자가 자동으로 제출하고 업데이트하는 드롭 다운 상자가됩니다. 사용자가 원하는 옵션을 클릭합니다.레일 : 드롭 다운 옵션을 클릭했을 때 (AJAX를 통해) 제출

여기 내가 현재보고있는 것의 벗겨진 버전이 있습니다. 이 옵션을 클릭하면 자동으로 제출되는 원격 양식으로 변환하는 가장 좋은 방법을 알아야합니다.

나는 어떤 접선 적 제안이나 다른 것을 지적 해 주어야한다. 나는 레일스에 비교적 익숙하다. 다른 사람들의 작업을 계속 참고하지 않고 코드를 작성할 수있는 지점에 이른다.

<!-- This is the "index" view, by the way. --> 
<% for membership in @story.memberships %> 
    <% form_for membership do |f| %> 
    <%= f.select :permissions, [['none', 0], ['admin', 9]] %> 
    <% end %> 
<% end %> 

답변

15

이 처리 할 수있는 몇 가지 방법이 있습니다합니다. 물론 필드 접근 방식은 하나 관찰,하지만 당신은 또한 간단한 자바 스크립트 또는 remote_function 그것을 할 사용할 수 있습니다 여기에

은 간단한 JS 방법입니다 : 다른 방법이 같은 것

<% remote_form_for membership do |f| %> 
    <%= f.select :permissions, [['none', 0], ['admin', 9]], {}, :onchange => 'this.form.submit()' %> 
<% end %> 

, 양식 빌더를 피하다 것이다 (이것은 몇 구문 오류가있을 수 있습니다) :

<%= select_tag(:permissions, [['none', 0], ['admin', 9]], {:onchange => "#{remote_function(:url => permissions_path(:story_id => story, 
      :with => "'permission='+value")}"}) 

가 개인적으로는 전자를 선호한다.

+0

는 두 솔루션을하려고하면,이 하나 더 노력하고 더 좋은 찾고 결국 . 감사! –

+4

어느 것이 첫 번째 또는 두 번째? – Angela

+1

@ takua108 어느 쪽이 끝났습니까? –

4

3 단계!

  1. form_forremote_form_for으로 지정하십시오. 이드를 추가하십시오!
  2. 추가 당신의 observe_field이 양식의 마지막 비트가 같은 모양

제출하는 것은 귀하 select

  • 구성 후 observe_field :

    <%= observe_field "id_of_select", :function => "$('form_id').submit();" %> 
    
  • 3

    원하는 프레임 워크를 사용하여 레일없이이를 수행하는 방법을 학습하십시오. Rails 태그를 사용하여 AJAX를 수행하면 작업을 신속하게 완료 할 수 있지만 태그 수행 방법에 대한 특정 사항을 변경해야 할 때 매우 제한적일 수 있습니다.

    웹 표준과 방법이 사이트에 눈에 거슬리지 자바 스크립트를 작성하는 방법에 대해 알아 : http://ajaxian.com/ http://www.alistapart.com/

    당신은 레일없이 AJAX를 수행하는 방법을 학습하여보다 유연하고 멋진 UI를 만들 수 있습니다. 레일 3에서

    +0

    스택에 오신 것을 환영합니다. 질문에 대한 구체적인 대답을 제공하기 위해 노력해야하며 그렇지 않을 경우 투표를 할 수 있습니다. 내가 당신에게 동의하고 위의 my.form.onsubmit() 솔루션이 사용자가 선택한 것보다 낫다고 생각할 때 특정 답변을 제공하는 것이 좋습니다. –

    +0

    감사합니다. 나는 그것을 염두에 두겠다. 눈에 잘 띄지 않는 스타일의 샘플을 포함하도록 내 게시물을 편집해야합니다. –

    4

    : 그것은 onsubmit this.form.submit(); 아니라고

    <%= form_for(membership, :remote => true) do |f| %>` 
        <%= f.select :permissions, [['none', 0], ['admin', 9]], {}, :onchange => 'this.form.submit();' %> 
    <% end %> 
    

    참고. 자바 스크립트 세미콜론도 잊지 마세요.

    1

    내가하지 않습니다 (나는 또한 비슷한 상황에 직면했지만, 내 경우에는 @scott에 의해 주어진 대답은 내가 폼에 remote: true 옵션을 추가했지만 예상대로 AJAX를 사용하여 양식을 제출하지 않은 레일 5 &을 사용하고 있습니다 양식에 submit 버튼이 있음).

    사람도 비슷한 문제가이 도움이 this-

    <% form_for membership remote: true, id: '#member_form' do |f| %> 
        <%= f.select :permissions, [['none', 0], ['admin', 9]], onchange: '$("#member_form").trigger("submit");' %> 
    <% end %> 
    

    희망처럼 JS 코드를 변경하려고 직면하면 ..

    관련 문제