所以我的页面上有多个复选框。我收集所有这些,如下面的代码所示。我想在将数组传递给控制器之前访问数组的值
= check_box_tag "names[]", ob.name, false, class: 'cbx'
我可以使用旧代码传递它们
%fieldset.actions
= form.submit "Upgrade", :class => 'button'
日志:
SomeController处理#create as HTML参数: { “UTF8”=> “中✓”, “names”=> [“ron”,“jacob”],“commit”=>“NameButton”}
确定。所以我想访问我的haml文件中的所有值。在提交表单之前有没有办法,我可以访问选中的复选框。
我想将名称[]作为参数传递给我的控制器。
=link_to script_name1, { :action => 'create', :names => 'dontknowhowtopassnames[]' }, :method => :post
Rails版本 - 3.2.17
答案 0 :(得分:1)
你可以使用Javascript来做到这一点。
确切的实现取决于您想要对这些值做什么 ,但您可以使用change
事件来跟踪和维护所有已检查值的数组:
/*
* should properly init this array if some of your checkboxes are already
* checked when the form is loaded
*/
var names = [];
$(document).ready(function() {
$(document).on('change', '.cbx', function() {
var name = $(this).val();
var idx = names.indexOf(name);
if ($(this).prop('checked') && idx === -1) {
names.push(name);
} else if (!($(this).prop('checked')) && idx >= 0) {
names.splice(idx, 1);
}
});
});
更新了补充答案:
提交带有链接而非按钮的表单:
在您看来,请替换
%fieldset.actions
= form.submit "Upgrade", :class => 'button'
与
= link_to "Submit", "#", :class => 'submit_link'
然后在您的Javascript中,在$(document).ready
正文中添加以下内容:
$(document).on('click', 'a.submit_link', function(e) {
$(this).closest('form').submit();
e.preventDefault();
});
就是这样。您可以尝试自行序列化表单数据,同时表单submit()
方法可以为您处理,从而使您的生活变得非常复杂。您可以自行序列化数据,并且它有时很有用,例如在处理AJAX时,但在您的情况下,默认的submit()
非常适合这项工作。