解决<select>的option过多而造成的下拉过长的方法

先来解释解释我标题所形容的问题。我相信大家在实际项目中肯定遇到过。

先来看看以下代码片:

<div style="background: cornsilk; width: 240px;height: 100px;">
	<select id="mySelect">
		<option>1</option>
		<option>2</option>
		<option>3</option>
		<option>4</option>
		<option>5</option>
		<option>6</option>
		<option>7</option>
		<option>8</option>
		<option>9</option>
		<option>10</option>
		<option>11</option>
		<option>12</option>
		<option>13</option>
		<option>14</option>
		<option>15</option>
		<option>16</option>
		<option>17</option>
		<option>18</option>
	</select>
</div>
在google浏览器效果如下:


ie8效果如下:


点击的按钮样式会表现不一:

当我们点击的时候:

google浏览器效果:


ie浏览器下拉效果:


可以看出来:当option过多时,下拉菜单非常冗长,当他的父元素高度固定时,下拉会溢出父元素,非常不美观。

网上的解决方案大多是:给select添加size属性,或者固定select高度 和font-size大小。

但是依然不满足我们的设计需求。

<div style="background: cornsilk; width: 240px;height: 100px;">
	<select id="mySelect" size="4">
		<option>1</option>
		<option>2</option>
		<option>3</option>
		<option>4</option>
		<option>5</option>
		<option>6</option>
		<option>7</option>
		<option>8</option>
		<option>9</option>
		<option>10</option>
		<option>11</option>
		<option>12</option>
		<option>13</option>
		<option>14</option>
		<option>15</option>
		<option>16</option>
		<option>17</option>
		<option>18</option>
	</select>
</div>
效果:


这样的效果只能通过拖动滑块才能浏览option 当你需要点击才能再现option时不符合。我们再来优化:

<div style="background: cornsilk; width: 240px;height: 100px;">
	<select id="mySelect" size="4" style="height: 20px;">
		<option>1</option>
		<option>2</option>
		<option>3</option>
		<option>4</option>
		<option>5</option>
		<option>6</option>
		<option>7</option>
		<option>8</option>
		<option>9</option>
		<option>10</option>
		<option>11</option>
		<option>12</option>
		<option>13</option>
		<option>14</option>
		<option>15</option>
		<option>16</option>
		<option>17</option>
		<option>18</option>
	</select>
</div>
google效果:


点击效果:


这样虽然可以点击但是每次只能看到一条option 也不符合要求。

虽然通过这样那样的努力渐渐的接近了需求的效果。但是select元素非常顽固。而且不同浏览器下表现差异太大。

始终不能得出很好的需求效果.

我们的需求是:


虽然这个select具有20个option 但是表现的非常和谐。也很美观。

这个实现方法依赖于一个Jquery插件:chosen.大家可以百度这插件进行下载。

导入:jqeury.js    chosen.css  chosen.jquery.js。

使用方法:

$("#mySelect").chosen({
	disable_search_threshold: 50,
});
效果:

下拉:

很明显短了很多也好看了很多,我们还可以更短,插入以下css代码

<style>
	.chosen-results{
		height: 70px;
	}
</style>
效果:


这样就非常迎合我们的需求。如果要改掉默认的“select a ..."文本也可以通过js改掉就是了。

这次的分享到此结束。

如果有大牛有更好的方法务必分享。








在 JSP 页面中,可以通过 JS 脚本来实现一个下拉列表框的值改变时,另一个下拉列表框的选项内容发生变化的联动效果。 具体实现方法如下: 1. 首先在页面加载时,给第一个下拉列表框绑定一个 `onchange` 事件,当其值改变时,触发 JS 函数。 2. 在 JS 函数中,获取第一个下拉列表框的选中值,并根据该值生成第二个下拉列表框的选项内容,并将其替换掉原有的选项内容。 3. 最后,将第二个下拉列表框的值重置为默认值。 下面是一个简单的示例代码: ```html <!-- 第一个下拉列表框 --> <select id="select1" onchange="onSelect1Change()"> <option value="option1">选项1</option> <option value="option2">选项2</option> <option value="option3">选项3</option> </select> <!-- 第二个下拉列表框 --> <select id="select2"> <option value="default">请选择</option> </select> <script> function onSelect1Change() { // 获取第一个下拉列表框的选中值 const selectedValue = document.getElementById('select1').value; // 根据选中值生成第二个下拉列表框的选项内容 let optionsHtml = ''; if (selectedValue === 'option1') { optionsHtml = '<option value="option1-1">选项1-1</option><option value="option1-2">选项1-2</option>'; } else if (selectedValue === 'option2') { optionsHtml = '<option value="option2-1">选项2-1</option><option value="option2-2">选项2-2</option>'; } else if (selectedValue === 'option3') { optionsHtml = '<option value="option3-1">选项3-1</option><option value="option3-2">选项3-2</option>'; } // 将第二个下拉列表框的选项内容替换为新的内容 document.getElementById('select2').innerHTML = optionsHtml; // 将第二个下拉列表框的值重置为默认值 document.getElementById('select2').value = 'default'; } </script> ``` 需要注意的是,该示例代码仅为演示联动效果的实现方法,实际应用时需要根据具体需求进行修改和优化。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值