2011-05-18 33 views
0

我有以下結構的一種形式AJAX鏈接調用表單提交無故軌道3

ROR代碼」

form_tag class='remote_form' remote=>true 
{ 
some fields 
1 
2 
3 
one <a> link remote=>true 
4 
submit button 
} 

jQuery代碼

$('.remote_form').live('ajax:beforeSend', function(event, elements){ 
do some blah blah 
} 

現在,當我點擊「一個鏈接」「blah blah」的事情執行。爲什麼這樣呢? 基本上只有當我點擊提交「blah blah」必須得到執行。

我做錯了什麼?


我的想法: 該表單包含一些元素。在表單被提交之前,我需要做一些事情,所以我使用ajax:在發送remote_form之前。現在我也有一些鏈接,這是一個完全獨立於form的ajax請求。 顯然,一個鏈接不應該導致執行「等等等等」。

回答

0

我不確定要理解。你的問題是,雖然表單尚未提交,但回調已被觸發?

你有沒有試着用經典的$。阿賈克斯()函數:

$('.remote_form').submit(function(){ 
    $.ajax({ 
     beforeSend: function(){ 
      // do something 
     } 
    }); 
}); 
+0

我的beofresend裏面我可以返回false來阻止我的表單被髮送。但在這我不能這樣做。 :( – 2011-05-18 09:00:19

+0

嗯......你真的想讓你的表單由AJAX發送嗎?在這種情況下,你總是會**在submit()事件結束時返回false; **然後調用一個函數(例如submitForm()手動提交表單數據)在beforeSend()回調中。我清楚嗎?:o) – 2011-05-18 09:27:01

+0

感謝您的回覆。但在我的情況下這是不可能的。 ,因爲表單通過rails-ujs.js(remote-data = true)進行ajax調用。 – 2011-05-18 10:09:27

1

ajax:beforeSend意味着所有的ajax調用。這就是爲什麼該功能正在執行。如果你想只在形式要執行的功能提出,結合其功能是表單提交事件像

$('#myForm2').submit(function() { 
     // inside event callbacks 'this' is the DOM element so we first 
     // wrap it in a jQuery object and then invoke ajaxSubmit 
     $(this).ajaxSubmit(options); 

     // !!! Important !!! 
     // always return false to prevent standard browser submit and page navigation 
     return false; 
    }); 

但jQuery有一個插件,它可以做所有這些事情你。我想你應該看看jquery form plugin,它解釋了關於使用Ajax提交表單的一切。

+0

還好它可能是「AJAX:beforeSend」是指所有Ajax調用,但如果我想這樣做只能從什麼。 ?我不想惹Rails-ujs.js。 – 2011-05-18 08:58:28