如何让 select_tag 带有 "selected disabled hidden" 选项?
How to have a select_tag with an "selected disabled hidden" option?
我想要一个 select_tag,其中包含一个向用户显示 "Please select" 的字段。
用户不得select启用此字段。
这是我想要的 jsfiddle:http://jsfiddle.net/gleezer/pm7cefvg/1/
在 Rails 中,我尝试这样做:
<%= select_tag(:userchief, options_for_select(@options_for_selectUsers, {:selected => "x1", :disabled => "x1", :hidden => "x1"})) %>
(@options_for_user
是一个包含多个key/value元素的数组)
但是当我检查我的页面的源代码时,我可以看到这个作为我的选择:
<option disabled="disabled" selected="selected" value="x1">Select</option>
这不是我想要的,x1 select 选项出现在 select 的下拉菜单中,因为隐藏字段不存在。
我怎样才能获得与我在 jsfiddle 中看到的相同的结果 link?
如果您希望占位符仅在呈现表单时属性为 nil 时显示,请使用 :prompt => "Placeholder"。默认情况下它将被 selected,但如果用户提交,则不会保存任何内容。如果该属性已经填充[可能是因为 a) 有默认值或 b) 它是一个编辑表单],占位符项目将从列表中完全省略。
select_tag "people", options_from_collection_for_select(@people, "id", "name"), prompt: "Select something"
# => <select id="people" name="people"><option value="">Select something</option><option value="1">David</option></select>
或
如果您想始终在渲染列表中包含占位符,请使用:include_blank =>“占位符”。
更新
以下代码将在更改后禁用提示。这与您的示例非常相似。
<%= select_tag(name = 'person', options_for_select(User.all.unshift("your prompt message"), selected: prompt, disabled: prompt,) ) %>
如果您想删除 select 更改的提示,则需要使用 jquery。
$("#selectBox").change(function(){
$("#selectBox option[value='']").remove();
});
这是旧的,但刚刚找到了一个不用 js 的好方法。可以肯定的是,这是基于公认的答案,所以归功于作者。基本上将 display:none
添加到所选选项会将其从选项列表中隐藏,但最初仍会显示在下拉列表中。
CSS:
.hidden {
display: none
}
HTML:
<%= f.select :category, options_for_select([['New', 0, {class: 'hidden'}], ['Improved', 1], ['Fixed', 2]], selected: 0, disabled: 0) %>
我想要一个 select_tag,其中包含一个向用户显示 "Please select" 的字段。 用户不得select启用此字段。
这是我想要的 jsfiddle:http://jsfiddle.net/gleezer/pm7cefvg/1/
在 Rails 中,我尝试这样做:
<%= select_tag(:userchief, options_for_select(@options_for_selectUsers, {:selected => "x1", :disabled => "x1", :hidden => "x1"})) %>
(@options_for_user
是一个包含多个key/value元素的数组)
但是当我检查我的页面的源代码时,我可以看到这个作为我的选择:
<option disabled="disabled" selected="selected" value="x1">Select</option>
这不是我想要的,x1 select 选项出现在 select 的下拉菜单中,因为隐藏字段不存在。
我怎样才能获得与我在 jsfiddle 中看到的相同的结果 link?
如果您希望占位符仅在呈现表单时属性为 nil 时显示,请使用 :prompt => "Placeholder"。默认情况下它将被 selected,但如果用户提交,则不会保存任何内容。如果该属性已经填充[可能是因为 a) 有默认值或 b) 它是一个编辑表单],占位符项目将从列表中完全省略。
select_tag "people", options_from_collection_for_select(@people, "id", "name"), prompt: "Select something"
# => <select id="people" name="people"><option value="">Select something</option><option value="1">David</option></select>
或
如果您想始终在渲染列表中包含占位符,请使用:include_blank =>“占位符”。
更新
以下代码将在更改后禁用提示。这与您的示例非常相似。
<%= select_tag(name = 'person', options_for_select(User.all.unshift("your prompt message"), selected: prompt, disabled: prompt,) ) %>
如果您想删除 select 更改的提示,则需要使用 jquery。
$("#selectBox").change(function(){
$("#selectBox option[value='']").remove();
});
这是旧的,但刚刚找到了一个不用 js 的好方法。可以肯定的是,这是基于公认的答案,所以归功于作者。基本上将 display:none
添加到所选选项会将其从选项列表中隐藏,但最初仍会显示在下拉列表中。
CSS:
.hidden {
display: none
}
HTML:
<%= f.select :category, options_for_select([['New', 0, {class: 'hidden'}], ['Improved', 1], ['Fixed', 2]], selected: 0, disabled: 0) %>