在Internet Explorer中渲染某些HTML控件时存在一些限制。其中之一是组合框(HTML)或ASP.NET的列表框(ListBox)。在渲染组合框或列表框时,存在一些限制:
在组合框中,如果指定了宽度,并且内容的长度大于指定的宽度,则不会显示水平滚动条。指定title属性不会显示工具提示。
查阅了网络上许多关于在组合框或列表框中添加水平滚动条的文章,但都没有找到满意的解决方案。
最终,找到了一些文章,解释了如何为组合框或列表框添加自定义水平滚动条。但是,自定义滚动条也有一些限制,上下箭头键不会按预期工作。可以使用DIV标签通过指定高度和宽度来实现组合框的水平滚动条。
现在,考虑一个场景,组合框中的项目数量大于指定的DIV元素的高度。现在,如果按下下/上箭头键,它不会按预期工作,即无法看到选定的项目。
要解决组合框中水平滚动条的问题,需要解决一些问题。众所周知,Internet Explorer不支持组合框中水平滚动条,所以需要使用自定义水平滚动条。从外观和用户的角度来看,水平滚动条将作为组合框的一部分出现。
现在在组合框上方添加了一个DIV标签。为了解决上下箭头键问题,需要使用一些技巧,使其按预期工作。
HTML:
<div id="divCollegeNames" style="OVERFLOW: auto; WIDTH: 304px; HEIGHT: 147px" onscroll="OnDivScroll();">
<SELECT id="lstCollegeNames" size="8" multiple onfocus="OnSelectFocus();">
需要在脚本层面注意一些事情:
JavaScript:
// 当DIV标签滚动时。
function OnDivScroll() {
var lstCollegeNames = document.getElementById("lstCollegeNames");
// 下面两点在滚动时实现两件事:
// a) 在水平滚动时:避免在大小为8且项目数量大于8的下拉框中出现垂直滚动条。
// b) 在垂直滚动时:查看下拉框中的所有项目
// 检查下拉框中的项目数量是否大于8,
// 如果是,则将下拉框的大小设置为项目数量,
// 这样下拉框中就不会出现垂直滚动条
if (lstCollegeNames.options.length > 8) {
lstCollegeNames.size = lstCollegeNames.options.length;
} else {
lstCollegeNames.size = 8;
}
}
// 当选择框聚焦时
function OnSelectFocus() {
// 在选择框聚焦时,将DIV的滚动位置设置为最左边,即0,如果不是的话。
// 在这种情况下,固定了Selectbox的大小为8,
// 如果Selectbox中的项目数量大于8,
// 并且要实现向下箭头键和向上箭头键功能,
// 如果DIV的水平滚动条在极右位置,选择框中的垂直滚动条将可见。
if (document.getElementById("divCollegeNames").scrollLeft != 0) {
document.getElementById("divCollegeNames").scrollLeft = 0;
}
var lstCollegeNames = document.getElementById('lstCollegeNames');
// 检查Selectbox中的项目数量是否大于8,
// 如果是,则将Selectbox的大小设置为8。
// 这样,在按下向下箭头键或向上箭头键时,
// 选定的项目也应该按预期向上或向下滚动。
if (lstCollegeNames.options.length > 8) {
lstCollegeNames.focus();
lstCollegeNames.size = 8;
}
}
就是这样!
有趣的点:
不可能只是赛道上的另一个障碍。