在HTML下拉框中实现水平滚动条

在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; } }

就是这样!

有趣的点:

不可能只是赛道上的另一个障碍。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485