2011-05-19 36 views
9

gönderildikten sonra uzak formdan kaldırılıyor Rails 3 with jQuery kullanıyorum ve tek bir metin girişi ve bir gönderme düğmesi ile basit bir form kullanıyorum. :remote => true ile gönderim formum var ve form formu gönderildikten sonra girişini silmek istiyorum. Bu jQuery kod çalıştı:Temizle

$('#new_message').submit(function() { 
    $('#message_content').val(''); 
}); 

Ancak bu form gönderildiğinde önce girişi temizler, bu yüzden boş bir formu göndermek sonunda.

biraz etrafına arama yaptıktan sonra, ben de şu versiyonunu denedik:

$('#new_message').submit(function(e) { 
    e.preventDefault(); 
    this.submit(); 
    $('#message_content').val(''); 
}); 

... ama bu :remote => true sihirli geçersiz görünüyor ve form sayfa tam olarak tekrar ile teslim alır. Herhangi bir fikir?

cevap

20

remote => true işaretli bir form için basılır, rails.js'deki javascript kodu submit() yapar. İşlevleri geçersiz kılmanız gerekmez.

$(document).ready yerine bu deneyin -

(. Düzenleme:. Kullanma bağlamak yerine canlı teşekkürler Darren Hicks)

$("#new_message").bind("ajax:complete", function(event,xhr,status){ 
    $('#message_content').val(''); 
} 

Bu ajax:complete olay için bir olay işleyicisi ekler. Ajax-submit-formu doldurulduğunda bu olay tetiklenir. Diğer here.

+0

Oooh, bu işe yarıyor mu? Bu harika. – CharlieMezak

+0

Güzel! Kodunuzu kullandım, ancak etkinliği, gönderimi hemen gönderdikten sonra (aslında isteğin gerçekleşmesini beklemek yerine) temizleyen, ancak yine de verileri doğru şekilde gönderen "ajax: beforeSend" olarak değiştirdim. Bunu kazandığın için teşekkürler! – Grantovich

+0

Bunu Coffeescript'te nasıl yapabilirsiniz? – tibbon

0

JQuery işlevinizde, get() aracılığıyla kendiniz gönderin. Get() öğesini çağırdıktan sonra metin alanını boş olarak ayarlayın. Ya da, bunu, teslim edilen metin alanı değerinin kabul edilebilir olup olmadığı gibi, denetleyicinizden bazı bilgileri almanızı sağlayacak() için sağladığınız başarılı geri bildirimde yapabilirsiniz. senin eylem .js.erb dosyasında

+0

Hmm ... Bunun işe yarayıp yaramadığını sanmıyorum, ancak işlevselliğini yeniden canlandırdığınız için ilk etapta ': remote => true' komutunu kullanmama noktasını altüst ediyor gibi görünüyor. Bunu son çare olarak yapabilirim, ama bunu yapmanın tek yolu buysa şaşırdım (ve biraz hayal kırıklığına uğradım). – Grantovich

1

eylem yöntem adı (eğer söz konusu devlet etmeyen) controller içerisinde olduğunu

$('#message_content').attr('value',''); 

Gönder düğmesini

+0

Bunu düşünmüştüm, ama giriş temizlenmeden önce tüm istek/yanıtın geçmesini beklemek anlamına geliyordu, bu da daha az bir şey gibi hissettiriyor (ve kullanıcı sabırsızlanıyorsa çoklu form gönderilmesine neden olabilir). abhishek'ın 'ajax: beforeSend' kullanarak olay bağlama çözümü, girişi hemen temizler. – Grantovich

+0

yeterince adil, ajax çağrısı herhangi bir nedenle başarısız olursa ve onların giriş kutusunu temizlediyseniz, kullanıcı rahatsız olabilir. İsteğin başarılı olduğuna dair başka bir görsel ipucu var mı? – Nick

+0

Söz konusu arabirim temel bir sohbet odasıdır, bu nedenle istek döndüğünde, kullanıcının mesajı sohbette görünür. Bence bu senaryoda yanıt verme, mesajınızı yeniden yazmadan yeniden göndermekten daha önemlidir. Ancak, gönderilen iletiyi istemci tarafına da kaydedebilir ve kullanıcıya geri kopyalayabilirim (kopyalayıp yapıştırmalarına izin vererek). ajax başarısız olur. – Grantovich

0

Bir Raylar AJAX böyle teslim tetikleyebilir: En model.js olarak

$(this).trigger('submit.rails'); 
0

   $('#element_id').val(' '); 

dosya Benim için iş ', bunu deneyebilirsiniz.