Rails 4:动态添加的复选框未提交
Rails 4: dynamically added checkboxes are not submitting
我开始学习Rails,并尝试将AJAX应用于一些动态添加到列表中的记录。然后我想删除直接在列表中通过复选框选择的多个记录。
它工作正常,但当我创建新记录并想在不刷新页面的情况下删除它时,它就不行了。标头的响应是:"ActiveRecord::RecordNotFound in AccountsController#destroym"。它就像我在不选中复选框的情况下单击按钮一样。
感谢您的帮助:)
accounts_controller.rb
def destroym
Account.destroy(params[:delete])
respond_to do |format|
format.html {redirect_to accounts_path}
format.js #render accounts/destroym.js.erb
end
end
_row.html.erb
<% @data = Account.find(id) %>
<tr id='tr<%= @data.id %>'>
<td><%= @data.id %></td>
<td><%= @data.login %></td>
<td><%= check_box_tag 'delete[]', @data.id %></td>
</tr>
索引.html.erb
<table class="table table-striped table-hover " id="accountsListing">
<%= form_tag destroym_accounts_path, method: :DELETE, remote: true, id: "deleteForm" do %>
<thead>
<tr>
<th>#</th>
<th>Username</th>
<th>Password</th>
<th>Website</th>
<th>Date</th>
<th>Editer</th>
<th><%= submit_tag "delete" %>
<%= link_to "Delete", '', :onclick => "$('#deleteForm').submit()", id: "removePwd", class: "text-danger", remote: true, method: :DELETE %> </th>
</tr>
</thead>
<tbody>
<% @accounts.each do |account| %>
<%= render 'row', id: account.id %>
<% end %>
</tbody>
<% end %>
</table>
destroym.js.erb
$("#accountsListing input:checked").closest("tr").remove();
创建.js.erb
$("#accountsListing tr:first").after("<%= escape_javascript (render 'row', id:@account.id) %>");
在这种情况下,问题是您要替换整个页面的 HTML...因此,绑定到元素的所有 DOM 事件也会被销毁。
当你替换html(.js.erb文件)时,Rails会为你的元素提供一些特殊的属性(Rails称之为"不显眼的JavaScript",因为你的元素中没有直接的JS代码)。
当然,这里的问题是Rails使用的JS代码(请参阅我的链接)仅在页面启动时应用。
您有以下几种选择:
1)您的destroy.js.erb
只能删除您刚刚删除的确切行(而不是替换所有行)。
2)你可以自己调用Rails-UJS的代码。这是一个黑客,不应该认真考虑。
3)您可以"自动"重新加载页面(您将失去AJaX的好处)。
4) 您可以编写自己的 JS 代码来发送 AJaX 请求。
我处理动态创建的复选框的解决方案。如果要处理动态添加的元素上的事件,则 on 函数是必需的。
JS代码
$("#deleteBtn").on("click", function() {
var ids = [];
$('#accountsListing :checkbox:checked').each(function(){
ids.push($(this).val());
});
$.ajax({
url: '/accounts/destroym',
type: 'POST',
data: {
"_method":"DELETE",
"authenticity_token": window._token,
"delete[]": ids
},
});
});
相关文章:
- Jquery表单验证插件-如果选中复选框,如何在提交时执行某些操作
- 如何获取所有选中复选框的所有值,然后将其提交到表单中
- 使用javascript提交表单并从字段/单选框/复选框/文本区域获取数据
- ASP MVC复选框表单提交问题
- 如何在将鼠标悬停在提交/锚点上时检查复选框是否已选中,并显示提示用户这样做的警报
- Rails 4:动态添加的复选框未提交
- 高级表单提交-单选、复选框和重定向
- 如何在提交时验证多个复选框
- 提交前验证超链接和复选框
- 为什么复选框在未选中时不提交任何数据
- 如何提交未选中复选框的值
- 如何使用javascript自动提交保存/重新填充的复选框
- 如何在提交时防止粘性复选框重置?(一页上有多个表格)
- HTML5/Javascript验证复选框提交URL重定向
- 使用复选框提交表单
- 使用复选框提交表单
- 使未选中的HTML复选框提交选中的值
- 通过取消选中复选框提交表单
- 可以't使用jQuery+Rails点击复选框提交表单
- Yahoo YUI2 datatable复选框提交