在表格中的选择框如何使得用户不仅可以自己选择,还可以自己输入?

话不多说。直接上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>

对应的浏览器中显示

android 三级下拉 可手动输入 下拉框可以手动输入_firefox

那么问题来了,加入我们不仅要选择。当选择框没有我们想要的数据的时候,我们想自己输入怎么办呢?

这里我想到的方案是给选择框单元格增加一个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标签能盖住选择框的文本显示区域,只让选择框的下拉按钮出现,

android 三级下拉 可手动输入 下拉框可以手动输入_android 三级下拉 可手动输入_02

然后要想办法实现选择框的值能够出现在input标签中

这很简单,我们通过jquery就可以搞定,

首先,我们给选择框的onchange 定义个函数change;

function change() {
        var selected = $('select').val();
        $('.input1').val(selected);
    }

 就是这么简单,当我们每次改变选择框的值,对应的input标签就能显示出对应的值。但当我们刚打开页面的时候,input标签是没用值的,所以我们可以给input添加个默认值

然而。问题就这么解决了吗?当然没有;不信你用浏览器打印预览试试

android 三级下拉 可手动输入 下拉框可以手动输入_web前端_03

看吧,我们仅仅只是盖住选择框。但打印的时候还是会重叠,而且,给添加z-index属性也没用。

这里我想出另一种方法;假如当每次改变值的时候让选择框选择的index(索引)为-1;是不是就可以解决呢?

function change() {
        var selected = $('select').val();
        $('.input1').val(selected);
        $('select').val(-1);
    }

 貌似真的可以

android 三级下拉 可手动输入 下拉框可以手动输入_android 三级下拉 可手动输入_04

打印预览就只有20,不会重叠,但问题来了。chrome浏览器完全没问题,但firefox的重叠问题却还是存在

android 三级下拉 可手动输入 下拉框可以手动输入_firefox_05

看来火狐对选择框的值改为-1没反应。于是我打印选择框的值

var options = $('select option:selected');
   console.log(options);

 打印出来 的options是个对象 如图

android 三级下拉 可手动输入 下拉框可以手动输入_web前端_06

通过对options对象的分析发现对options 的更改index索引值还是没效果;于是只能想另一种方案;  那就是通过打印的时候让选择框display:none

代码:

@media print {
        select{
            display: none;
        }
    }

 最后在火狐上打印效果

android 三级下拉 可手动输入 下拉框可以手动输入_android 三级下拉 可手动输入_07

这下火狐也正常打印了,经测试。IE也没问题。到此解决