2011-12-20 1 views
13

를 원격 양식을 제출내가 예를 들어이 같은 모습 원격 형태가 내 레일 애플 리케이션에서 자바 스크립트와 레일을

<%= 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 %> 

지금 내가 자바 스크립트를 통해이 양식을 제출하고 모든 트리거하려는 원격 형태의 레일 콜백. 지금까지 나는 몇 가지 시도했지만 아무것도 작동하는 것 같습니다.

상황은 내가 시도 :

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

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

하지만 행운까지. 어떤 아이디어?

+1

'$ ("# my-form")은 어떨까요? submit()'? 필요한 콜백을 실행합니까? 나는 [내 자신의 코드] (https://github.com/BinaryMuse/BG-Tracker/blob/01a958924fc8cc67c0effa340e72ede43298b8fd/app/assets/javascripts/battlegroups.js.coffee#L5)와 비슷한 것을 사용했다는 것을 안다. –

+0

예! : P – Matthew

답변

7

.submit();

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

예. 이것은 완벽하게 작동했습니다. 생각보다 훨씬 더 간단합니다 ... – Matthew

+6

그냥 jQuery 객체에서 호출되어야한다고 추가하고 싶습니다. 예를 들어'$ ('.a'). change (function {this.submit()})와 같이하면 작동하지 않을 것이다. '$ (this)'와 같은 jQuery 객체에서'this'를 래핑해야합니다. 그러면 그걸 우스꽝스럽게 부를 수 있습니다. –

+2

경고 : 양식을 원격으로 제출하지 않습니다 (아약스 기준). 대신 완전 새로 고침이 발생합니다 – Fred

1

컨트롤러에서 json을 전달하고 js로 캡처하는 방법은 어떻습니까?

이제 컨트롤러의

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 

같은 행동 그리고 당신이 찾고되지만, 아니 정확히

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

으로 JS에서 JSON을 캡처이 어떤 도움이 될 밝혀 바랍니다.

+1

나는 그가 단순히 양식 자체를 제출하는 방법을 요구하고 있다고 생각한다. – andrewpthorp

+0

양식을 명시 적으로 'some_path'에 원격으로 제출하면 안됩니다. – Abhaya

46

이 레일 방식으로 간단 :

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

이것은 실제 답변입니다. 그것은 원격 양식의 행위를 제출하는 ajax를 보존합니다. 감사 ! – Fred

+0

당신은 오신 것을 환영합니다! –

+1

이스마엘 (Ismael)의 해설 : 원격 제출 동작을 위해 jQuery 객체에 양식을 래핑해야한다. 그래서'myForm.submit()'이 아니라'$ (myForm) .submit()'입니다. 꽤 오랫동안 문제를 발견하지 못했습니다 ... – NobodysNightmare

18

비 JQuery와 rails-ujs와 이전 jquery-ujs을 대체 레일 버전 5.1, 위의 답변이 더 이상 작동하지, 항상를 통해 양식을 제출에서 HTML HTTP 의뢰.

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

어떤 이유로 (가 ... 밖으로 하나를 내기 위해 나를 걸린 시간을 말할 수 없다), 일반 이벤트를하지 않는 거품이는 새 레일이 이벤트 핸들러를 제출 트리거하는 방법입니다 jQuery에 의해 트리거 될 때 위임 된 이벤트 핸들러 attached by rails에 레일스의 새로운 delegate function을 올바르게 연결해야합니다.

+4

THX에서 정답으로 표시되어야합니다! 이것은 나를 영원히 이해할 수 있었을 것입니다 .. – ErwinM