在表格中的选择框如何使得用户不仅可以自己选择,还可以自己输入?
话不多说。直接上html
<body> <table class="table table-bordered"> <tr> <td>#</td> <td>1</td> <td>2</td> </tr> <tr> <td></td> <td></td> <td> <select> <option value="10">10</option> <option value="20">20</option> <option value="30">30</option> </select> </td> </tr> </table> </body>
对应的浏览器中显示
那么问题来了,加入我们不仅要选择。当选择框没有我们想要的数据的时候,我们想自己输入怎么办呢?
这里我想到的方案是给选择框单元格增加一个input标签,然后让input标签盖住选择框数据
<table class="table table-bordered" > <tr> <td>#</td> <td>1</td> <td>2</td> </tr> <tr> <td></td> <td></td> <td> <select> <option value="10">10</option> <option value="20">20</option> <option value="30">30</option> </select> <input class="input1"> </td> </tr> </table>
这样的效果会让input标签显示在选择框的后面,同时拉大了单元格的宽度,所以应当给input标签添加relative属性,代码如下
<style> .table-bordered{ width: 600px; } .input1{ position: relative; width: 30px; margin-left: -50px; } </style>
通过设置input标签的宽度以及margin-left。使得input标签能盖住选择框的文本显示区域,只让选择框的下拉按钮出现,
然后要想办法实现选择框的值能够出现在input标签中
这很简单,我们通过jquery就可以搞定,
首先,我们给选择框的onchange 定义个函数change;
function change() { var selected = $('select').val(); $('.input1').val(selected); }
就是这么简单,当我们每次改变选择框的值,对应的input标签就能显示出对应的值。但当我们刚打开页面的时候,input标签是没用值的,所以我们可以给input添加个默认值
然而。问题就这么解决了吗?当然没有;不信你用浏览器打印预览试试
看吧,我们仅仅只是盖住选择框。但打印的时候还是会重叠,而且,给添加z-index属性也没用。
这里我想出另一种方法;假如当每次改变值的时候让选择框选择的index(索引)为-1;是不是就可以解决呢?
function change() { var selected = $('select').val(); $('.input1').val(selected); $('select').val(-1); }
貌似真的可以
打印预览就只有20,不会重叠,但问题来了。chrome浏览器完全没问题,但firefox的重叠问题却还是存在
看来火狐对选择框的值改为-1没反应。于是我打印选择框的值
var options = $('select option:selected'); console.log(options);
打印出来 的options是个对象 如图
通过对options对象的分析发现对options 的更改index索引值还是没效果;于是只能想另一种方案; 那就是通过打印的时候让选择框display:none
代码:
@media print { select{ display: none; } }
最后在火狐上打印效果
这下火狐也正常打印了,经测试。IE也没问题。到此解决