HTML选择元素-自定义默认值?(跨浏览器解决方案)
HTML select element - Custom default value? ( Cross-browser solution )
如何将自定义(非选项)文本显示为select的默认值?
我想显示一个选择标签,上面写着:"选择任何东西",但我不希望这个字符串出现在选项列表中。
在您的回答中-如果可能的话-请避免元素重叠,以及其他廉价的解决方案,以保持跨浏览器支持
不需要optgroup
或JavaScript:
<select>
<option disabled selected>Choose whatever</option>
<option>1</option>
</select>
JSFiddle
为了在关注select
元素时隐藏一个选项(根据注释,这似乎是目的),最简单的方法是在关注select
元素时删除第一个选项。为了明确起见,假设您想对一个分配了id=foo
的select
元素执行此操作,则此代码可以完成以下任务:
window.onload=函数(){document.getElementById('fo').onfocus=函数(){this.removeChild(this.options[0]);};}
不过,这也存在一些可用性问题。当使用集中在元素上时,提示将永远丢失,如果用户只是在表单中移动,并且可能在以后真正想要进行选择时需要提示,则这是不好的。(通过在模糊上恢复它来修复这个问题并没有那么简单,因为表单提交也会模糊元素。)当用户在元素内部进行选择时,提示不可用,但这在请求中是继承的。根据可访问性原则,控件应该具有使用label
元素与其关联的标签。
附言:尽管CSS有:focus
选择器,但由于实现中的特殊性,您无法有效地使用CSS。select
元件通常以或多或少不受CSS影响的方式来实现。
您可以通过在span
中显示默认选项来实现这一点,即不作为select
的一部分。
HTML:
<span id="default_message">Choose whatever</span>
<select id="my_select">
<option value="1">Option 1</option>
<option value="2">Option 2</option>
<option value="3">Option 3</option>
</select>
查询:
$(document).ready(function() {
$('#my_select').prop("selectedIndex", -1);
var offset = $('#my_select').offset();
offset.top += 3;
offset.left += 3;
$('#default_message').offset(offset);
$('#my_select').change(function() {
if ($(this).prop("selectedIndex") != -1) {
$('#default_message').hide();
}
});
});
以及您的CSS:
#default_message {
position: absolute;
display: block;
width: 120px;
color: grey;
}
select {
width: 150px;
}
您也可以将默认选项设置为disabled
,然后它将无法选择,但它将与列表中的其他选项一起显示。
<select id="my_select">
<option value="1" selected disabled>Choose whatever</option>
<option value="1">Option 1</option>
<option value="2">Option 2</option>
<option value="3">Option 3</option>
</select>
为什么不使用<optgroup>
:
<select id="my_select">
<optgroup label="choose whatever">
<option value="1">Option 1</option>
<option value="2">Option 2</option>
<option value="3">Option 3</option>
</optgroup>
</select>
JS Fiddle演示。
不利的一面是,<optgroup>
的标签只有在打开<select>
时才可见,而不是显示(默认值或)所选的值。
仅使用HTML和CSS:
<select>
<option disabled selected>Select something</option>
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option>5</option>
</select>
使用CSS:
select:focus option:disabled {
display: none;
}
JS Fiddle演示。
参考文献:
<optgroup>
- 在IE8和其他带有javascript的浏览器中获取正文类的标准解决方案是什么
- 是否有用于CSS浏览器支持新功能的javascript解决方案
- 是否有跨浏览器的解决方案可以在客户端上创建目录
- 关闭浏览器时使用 ajax 执行查询的解决方案
- 什么是在javascript中检测操作系统,浏览器和版本号的广泛解决方案
- 在不刷新的情况下更改页面 URL - 是否有跨浏览器解决方案
- 寻找跨浏览器解决方案来突出显示选项卡
- 用于禁用/启用滚动的跨浏览器解决方案
- 用于替换 event.layerX 和 event.layerY 使用的跨浏览器解决方案
- 加载多个图像时用于回调的跨浏览器解决方案
- HTML选择元素-自定义默认值?(跨浏览器解决方案)
- 表单外提交按钮的跨浏览器解决方案
- 使用SVG文件的跨浏览器解决方案
- 在页面上打印元素内容的跨浏览器解决方案是什么?
- 防止元素焦点丢失(需要跨浏览器解决方案)
- 用Java Script动态更改段落中的日期(需要跨浏览器解决方案)
- Javascript:用于选择焦点文本框内所有文本的跨浏览器解决方案
- CSS:悬停以强制元素偏移所需的跨浏览器解决方案
- jQuery + Ajax浏览器解决方案非常大的文件
- 无法找到从iFrame打印的跨浏览器解决方案