我希望有一个select_tag,其中包含一个向用户显示“Please select”的字段。 用户不能选择此字段。
以下是我想要的内容: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
是一个包含多个键/值元素的数组)
但是当我检查我的页面的源代码时,我可以看到这个选项:
<option disabled="disabled" selected="selected" value="x1">Select</option>
这不是我想要的,x1选择选项出现在选择的下拉菜单中,因为隐藏字段不存在。
如何获得与jsfiddle链接中相同的结果?
答案 0 :(得分:2)
使用:prompt =&gt;如果您希望占位符仅在表单呈现时属性为nil时显示,则为“占位符”。它将默认选中,但如果用户提交,则不会保存任何内容。如果属性已经填充[可能因为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>
OR
使用:include_blank =&gt;如果您希望始终在渲染列表中包含占位符,请使用“占位符”。
以下代码将在更改后禁用提示。这与你的例子很相似。
<%= select_tag(name = 'person', options_for_select(User.all.unshift("your prompt message"), selected: prompt, disabled: prompt,) ) %>
如果你想删除选择更改的提示而不是你需要使用jquery。
$("#selectBox").change(function(){
$("#selectBox option[value='']").remove();
});
答案 1 :(得分:0)
这是旧的,但刚刚找到一个很好的方法来做到这一点没有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) %>