2011-12-20 11 views
13

uzak formu gönderin:Ben mesela şuna benzer bir uzak form var benim raylar uygulamasında javascript ile bir raylar

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

Şimdi ben javascript yoluyla bu formu göndermek ve tüm tetiklemek istiyoruz uzaktan formunu raylar geri aramaları. Şimdiye kadar birkaç şey denedim ama hiçbir şey çalışmıyor gibi görünüyor.

Sevdiğim şeyler denedim:

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

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

ama hayır şans şimdiye kadar. Herhangi bir fikir?

+1

Peki ya "$ (" # formum "). Submit()'? Gerekli geri çağrıları tetikliyor mu? Ben kendi kodumda benzer kullandığımı biliyorum (https://github.com/BinaryMuse/BG-Tracker/blob/01a958924fc8cc67c0effa340e72ede43298b8fd/app/assets/javascripts/battlegroups.js.coffee#L5). –

+0

Evet öyle! : P – Matthew

cevap

7

Yalnızca .submit();

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

Ya bu mükemmel bir şekilde çalıştı. Ben düşündüğümden çok daha basit ... – Matthew

+6

Sadece jQuery nesnesinde çağrılması gerektiğini eklemek istiyorum. Örneğin, $ ('. A') gibi bir şey yaparsanız, change (function {this.submit()}) 'dır. Bunu, $ (this) 'gibi bir jQuery nesnesinde paketlemelisiniz. Öyleyse bunun üzerine özetini arayabilirsiniz. –

+2

Uyarı: Form (ajax tarafından) uzaktan verilmeyecektir. Bunun yerine tam bir yenileme gerçekleşir – Fred

1

Json'u denetleyiciden geçirme ve bunu j'lerinizle kaydetme hakkında.

Şimdi, kontrolörün

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 

olarak eylem Ve aradığınız ancak değil tam olarak ne

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

olarak js json yakalayan bu herhangi bir yardım olarak çıkıyor umuyoruz.

+1

Sadece formun kendisini nasıl göndereceğini sorduğuna inanıyorum. – andrewpthorp

+0

, formun kendiliğinden belirtilen şekilde 'some_path' olarak gönderilmesini istememektedir. – Abhaya

46

Bu Raylar şekilde basitçe:

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

Bu gerçek bir cevaptır. Uzak formun ajax gönderme davranışını korur. Teşekkürler ! – Fred

+0

size bekliyoruz! –

+1

Ismael hakkındaki Yorumu saklayın: Uzaktan gönderim davranışı için formunuzu jQuery nesnesine sarmanız gerekir. Yani myForm.submit() ', ancak' $ (myForm) .submit() 'değil. Meseleyi uzun zamandır görmedim ya da ... – NobodysNightmare

18

olmayan bir jquery rails-ujs ile eski jquery-ujs yerini Raylar 5.1+, yukarıdaki cevaplar artık işin, her zaman bir yoluyla formu gönderirken HTML HTTP istek.

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

Nedense (o ... dışarı Şunu anlamaya götürdü ne kadar söyleyemem), düzenli olaylar yok kabarcık: Bu yeni raylar olay işleyicisi gönderme tetiklemek nasıl jQuery tarafından tetiklendiğinde, rayların yeni delegate function kullanarak delegelenmiş olay işleyicisine attached by rails doğru şekilde yukarı doğru.

+4

THX! 'In modern versiyonlarında doğru cevabı işaretlemelidir. Bu beni sonsuza kadar anlamaya çalıştı. – ErwinM