默认文本,不会显示在下拉列表中

Vit*_*mar 101 html html-select

我有一个select最初显示选择语言,直到用户选择一种语言.当用户打开选择时,我不希望它显示选择语言选项,因为它不是实际选项.

我怎样才能做到这一点?

Nob*_*ita 201

Kyle的解决方案对我来说非常好,所以我进行了研究以避免任何Js和CSS,但只是坚持使用HTML.将值添加selected到我们想要显示为标题的项目会强制它在第一个位置显示为占位符.就像是:

<option selected disabled>Choose here</option>
Run Code Online (Sandbox Code Playgroud)

完整的标记应该是这样的:

<select>
    <option selected disabled>Choose here</option>
    <option value="1">One</option>
    <option value="2">Two</option>
    <option value="3">Three</option>
    <option value="4">Four</option>
    <option value="5">Five</option>
</select>
Run Code Online (Sandbox Code Playgroud)

你可以看看这个小提琴,这是结果:

在此输入图像描述

如果您希望在用户单击选择框后出现在选项中列出的占位符文本,只需添加hidden属性,如下所示:

<select>
    <option selected disabled hidden>Choose here</option>
    <option value="1">One</option>
    <option value="2">Two</option>
    <option value="3">Three</option>
    <option value="4">Four</option>
    <option value="5">Five</option>
</select>
Run Code Online (Sandbox Code Playgroud)

检查这里小提琴和下面的截图.

在此输入图像描述

  • 另请注意,在`select`中的`option`上设置`hidden`在Safari或iOS或Mac上都不起作用.因此,这个答案仅提供部分浏览器支持. (2认同)

小智 56

这是解决方案:

<select>
    <option style="display:none;" selected>Select language</option>
    <option>Option 1</option>
    <option>Option 2</option>
</select>
Run Code Online (Sandbox Code Playgroud)

  • 请注意,`selected ="true"`无效.相反,在(X)HTML中使用`selected ="selected"`或在HTML中使用`selected`.看起来你把`selected`属性与`selected`属性混淆了,这个属性改变如下:`myOption.selected = true;`或`myOption.selected = false;` (5认同)
  • 使用Android和iOS等设备原生选择的浏览器会忽略"display:none".您必须从select.focus中删除DOM中的选项并将其返回并在select.blur中选择它以使其工作. (2认同)

Ori*_*iol 46

正确和语义的方式是使用占位符标签选项:

  • 添加一个option元素作为第一个子元素select
  • 设置为那个value= ""option
  • 将占位符文本设置为其内容 option
  • required属性添加到select

这将迫使用户选择以另一种选择能够提交表单,和浏览器应该呈现option如期望的那样:

如果select元素包含占位符标签选项,则用户代理应以传达它是标签的方式呈现该选项,而不是控件的有效选项.

但是,大多数浏览器都会将其渲染为正常情况option.因此,我们必须手动修复它,方法是将以下内容添加到option:

select > .placeholder {
  display: none;
}
Run Code Online (Sandbox Code Playgroud)
<select required>
  <option class="placeholder" selected disabled value="">Select language</option>
  <option>Option 1</option>
  <option>Option 2</option>
</select>
Run Code Online (Sandbox Code Playgroud)


小智 21

因为您不能使用为select标签分配占位符,所以我不相信有任何方法可以完全按照您的要求使用纯HTML/CSS.但是,您可以执行以下操作:

<select>
  <option disabled="disabled">Select language</option>
  <option>Option 1</option>
</select>
Run Code Online (Sandbox Code Playgroud)

"选择语言"将显示在下拉列表中,但是一旦选择了其他选项,将无法重新选择它.

我希望有所帮助.

  • 我发现最好的是禁用和选择的组合与style ="display:none;".当您要执行验证时,禁用非常有用 - 它确保您默认情况下未选择启用的选项. (2认同)

小智 7

试试这个:

<div class="selectSelection">
    <select>
        <option>Do not display</option>
        <option>1</option>
        <option>1</option>
    </select>
</div>
Run Code Online (Sandbox Code Playgroud)

在CSS中:

.selectSelection option:first-child{
    display:none;
}
Run Code Online (Sandbox Code Playgroud)


Bal*_*ick 5

我有一个解决方案,在选择上方显示跨度,直到选择完成.跨度显示默认消息,因此它不在命题列表中:

HTML:

<span id="default_message_overlay">Default message</span>
<select id="my_select">
    <option value="1">Option 1</option>  
    <option value="2">Option 2</option>
    <option value="3">Option 3</option>
</select>
Run Code Online (Sandbox Code Playgroud)

CSS:

#default_message_overlay {
    position: absolute;
    display: block;
    width: 120px;
    color: grey;
}
select {
    width: 150px;
}
Run Code Online (Sandbox Code Playgroud)

Javascript(使用JQuery):

$(document).ready(function() {
    // No selection at start
    $('#my_select').prop("selectedIndex", -1);

    // Set the position of the overlay
    var offset = $('#my_select').offset();
    offset.top += 3;
    offset.left += 3;
    $('#default_message_overlay').offset(offset);

    // Remove the overlay when selection changes
    $('#my_select').change(function() {
        if ($(this).prop("selectedIndex") != -1) {
            $('#default_message_overlay').hide();
        }
    });
});
Run Code Online (Sandbox Code Playgroud)

为演示制作了一个jsfiddle.用Firefox和IE8测试.