2011-12-14 41 views
2

新的Rails,甚至更新的Ajax。我有一個顯示可搜索記錄表的頁面。我使用partials和jQuery來通過ajax更新搜索結果表的內容。除非顯示搜索結果,否則單擊提交按鈕不會執行任何操作,即使選擇了某些項目,該部分也可以很好地工作。爲什麼在Rails應用程序中通過ajax替換表內容後,提交按鈕不起作用?

表部分定義:

<table border="1" class="pretty"> 
    <tr> 
    <th></th> 
    <th><%= sortable "name", "Name" %></th> 
    <th><%= sortable "num_posts", "Posts" %></th> 
    <th></th> 
    </tr> 

<%= form_tag() do %> 
<% @friends.each do |friend| %> 
    <tr> 
    <td><%= image_tag friend.pic_url %></td> 
    <td><%= friend.name %></td> 
    <td><%= friend.num_posts %></td> 
    <td><%= check_box_tag "selected_friends[#{friend.id}]" %></td> 
    </tr> 
<% end %> 
</table> 
<%= paginate @friends %> 
<br /> 
<%= submit_tag "Un-ignore friend(s)", :name => 'unignore_selected' %> 
<% end %> 

這裏是jQuery的調用通過Ajax呈現部分:

$('#datatable').html('<%= escape_javascript(render("table")) %>'); 

這裏在application.js中的jQuery方法我用支持此(直接從railscasts,所以我不是100%清楚這些在做什麼)引擎蓋

$('#datatable th a').live('click', function() { 
    $.getScript(this.href); 
    return false; 
}); 

$('#data_search').submit(function() { 
    $.get(this.action, $(this).serialize(), null, 'script'); 
    return false; 
}); 

當我在完成搜索後單擊提交按鈕時,在螢火蟲或Chrome開發工具中完全沒有任何活動,我的操作控制器上的斷點也沒有被擊中。我試着添加一個類似於上面的「#data_search」的jQuery函數,但是這完全破壞了按鈕。

有關爲什麼發生這種情況以及如何解決它的任何想法?

+1

您是否嘗試過的JavaScript源上設置的JavaScript斷點(通過螢火蟲,Chrome瀏覽器開發工具等)內提交內部函數之前?如果您發佈實際呈現的HTML表格而不是表格定義,它可能會更有幫助。 – 2011-12-14 21:24:14

+0

不,但我所做的是在應用程序中放置警報。js文件查看/何時jquery正在被擊中;它只是需要傳遞給動作控制器的參數爲零,所以它會跳過本來應該執行的任務。 – BrMcMullin 2011-12-14 21:26:18

回答

1

首先將表單包裝移動到表格外面,看起來有點扭曲。

您局部的表單沒有任何操作。所以當按下按鈕時,它沒有做任何事情,因爲它沒有被告知要做什麼。

變化

form_tag() 

form_tag('/place_you_want_this_form_posted_to') 

,並應採取擺在首位提交表單的照顧。

下一個問題是(我假設)你也希望通過ajax提交這個表單。這就是$('#data_search').submit(function() {塊爲第一種形式所做的。它正在劫持該表單的提交,並將其轉換爲ajax電話。你需要爲你的新表單做同樣的事情。首先給它一個id,然後做同樣的事情來劫持它。

form_tag('/place_you_want_this_form_posted_to', :id => "my_form_id") 

的JavaScript劫持相同

$('#my_form_id').submit(function() { 
    $.get(this.action, $(this).serialize(), null, 'script'); 
    return false; 
}); 
1

看起來您的表格標籤始於表格中間。這似乎是錯誤的。這也可能會導致您的表單在表被重新加載時被替換,而且這不是委託提交處理程序,因此它不適用於替換後的表單。我懷疑格式不正確的HTML會使它無法用於表單。將表格開始移動到表格開始之外。

+0

因此,check_box_tags不需要住在表單部分內,以便在提交時傳遞給操作控制器? – BrMcMullin 2011-12-14 20:25:32