如何让select_tag包含“已选中已停用隐藏”选项?

时间:2016-07-15 10:25:25

标签: html ruby-on-rails html-select erb hidden

我希望有一个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链接中相同的结果?

2 个答案:

答案 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) %>