Rails check_box_tag - 获取在视图(haml)文件中检查的所有值
Rails check_box_tag - get all the values checked in view(haml) file
所以我的页面上有多个复选框。我收集了所有这些,如下面的代码所示。我想在将数组传递给控制器之前访问数组的值
= check_box_tag "names[]", ob.name, false, class: 'cbx'
我可以用我的旧代码传递它们
%fieldset.actions
= form.submit "Upgrade", :class => 'button'
日志:
Processing by SomeController#create as HTML Parameters:
{"utf8"=>"✓",
"names"=>["ron", "jacob"], "commit"=>"NameButton"}
好的。所以我想访问我的 haml 文件中的所有值。有没有办法在我提交表单之前访问选中的复选框。
我想将名称[]作为参数传递给我的控制器。
=link_to script_name1, { :action => 'create', :names => 'dontknowhowtopassnames[]' }, :method => :post
Rails 版本 - 3.2.17
您可以使用 Javascript 来做到这一点。
确切的实现取决于 what 你想用这些值做什么,但是你可以,例如,使用 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);
}
});
});
更新了补充答案:
要使用 link 而不是按钮提交表单:
在您看来,替换
%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()
非常适合这项工作.
所以我的页面上有多个复选框。我收集了所有这些,如下面的代码所示。我想在将数组传递给控制器之前访问数组的值
= check_box_tag "names[]", ob.name, false, class: 'cbx'
我可以用我的旧代码传递它们
%fieldset.actions
= form.submit "Upgrade", :class => 'button'
日志:
Processing by SomeController#create as HTML Parameters: {"utf8"=>"✓", "names"=>["ron", "jacob"], "commit"=>"NameButton"}
好的。所以我想访问我的 haml 文件中的所有值。有没有办法在我提交表单之前访问选中的复选框。
我想将名称[]作为参数传递给我的控制器。
=link_to script_name1, { :action => 'create', :names => 'dontknowhowtopassnames[]' }, :method => :post
Rails 版本 - 3.2.17
您可以使用 Javascript 来做到这一点。
确切的实现取决于 what 你想用这些值做什么,但是你可以,例如,使用 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);
}
});
});
更新了补充答案:
要使用 link 而不是按钮提交表单:
在您看来,替换
%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()
非常适合这项工作.