2010-03-04 25 views
5

在Rails 3應用程序中,只要某個複選框被切換,我就想讓瀏覽器調用遠程函數。在Rails 2中,這很容易通過將form.ubmit()未被rails.js UJS觀察者

:onclick => remote_function(...) 

傳遞給複選框助手。在Rails 3,*功能弱化了REMOTE_,所以我嘗試以下解決方法:從onclick處理程序調用$("dummy_form").submit();

  • 創建一個圍繞該複選框形式使用form_tag ... :remote => true
  • 提交表單

Rails捆綁的rails.js文件是一個觀察器,用於偵聽submit事件。但是,這些僅在用戶點擊提交按鈕時觸發,而不是在調用form.submit()時觸發(目前僅在FF中進行測試)。

這會產生不希望的效果,即提交不是通過AJAX在後臺完成,而是通常的方式,因此瀏覽器會離開當前站點並顯示來自控制器的響應。

有誰知道解決方法?也許完全不同的方式來獲得相同的功能?

回答

1

可以通過調用提交表單:

$("dummy_form").request({ 
    onSuccess: function(response) {eval(response)} 
}); 

這將提交使用AJAX給form_tag的和評估收到的響應與URL的形式,所以它必須與JS迴應。如果您不需要,請更改onSuccess實現。

如果表單提交是一種解決方法,就像你說的,那不是提交整個表單,你也可以處理上的複選框手動上單擊事件併發送AJAX request

<%= javascript_tag do %> 
Event.observe(window, 'load', function() { 
    $('CHECK_BOX_ID').observe('click', function(event) { 
    new Ajax.Request('/your/url', { 
     onSuccess: function(response) { 
     // yada yada yada 
     } 
    }) 
    }); 
});