2010-03-11 56 views
0

我正在尋找一種方式來調用 submitHandler成功自定義函數做適當的ajax後。不顯眼的jQuery和Rails的AJAX和表單驗證

這裏是我的自定義函數:

jQuery.fn.submitWithAjax = function() { 
this.submit(function() { 
$.post(this.action, $(this).serialize(), null, "script"); 
return false; 
}) 
return this; 
}; 

使用驗證插件之前,我有以下這工作得很好:

$(文件)。就緒(函數(){ $( 「#my_form」 ).submitWithAjax();}

現在我已經添加了驗證部分,而且不知道如何調用我的 定製submitWithAjax功能?

$(document).ready(function() { 

$("#my_form").validate({ 

/*Validations - works perfectly!! */ 

}, 

submitHandler: function(form) { 

/* $("#my_form").submitWithAjax(); - this works but 
introduces recursion */ 

/* how to call custom subitWithAjax() ????? */ 

} 

}); 
}) 

謝謝!

回答

0

您的自定義插件只增加了一個提交事件處理程序,不會與驗證插件 工作試試這個

$("#my_form").validate({ 
    /*Validations - works perfectly!! */ 
}, 
submitHandler: function(form){ 
    $.post(this.action, $(form).serialize(), null, "script"); 
}); 
+0

這是事實,但我也做jQuery和AJAX設置每個Ajax請求之前: jQuery.ajaxSetup({ 'beforeSend':函數(XHR {xhr.setRequestHeader( 「接受」 ,「text/javascript」)} }); 您的建議'before send'將不會被調用 – bogumbiker 2010-03-12 03:02:11

+0

@bogumbiker beforeSend事件被您正在調用的$ .post方法觸發,而不是由submit事件觸發。你的beforeSend函數仍然可以工作 – PetersenDidIt 2010-03-12 03:05:57

+0

我認爲你是正確的,但是服務器端代碼(ror)不能正確地處理請求,authenticity_token丟失了。謝謝! – bogumbiker 2010-03-12 03:17:03

0

我在使用rails.js同樣的問題,爲我工作,所以我決定叫ajax:beforeSend回調中驗證(描述here)。下面是解決方法:

$('form').live('ajax:beforeSend', function(event, xhr, status){ 
    var form = $(this); 
    form.validate({ 
    /* validation options go here */ 
    }); 
    if (!form.valid()) { 
    return false; 
    } 
});