可输入可选择的input

因项目需要 要实现一个可选择可输入的下拉框,故写了一个

html代码

 1 <div class="col-sm-10">
 2         <input type="text" id="" class="form-control" placeholder="请输入姓名">
 3     </div>
 4     <div class="col-sm-10">
 5         <input type="text" id="h-input" class="form-control" placeholder="请输入成绩或选择身高">
 6         <div class="selInput" id="height">
 7             <ul>
 8                 <li>163cm</li>
 9                 <li>162cm</li>
10             </ul>
11         </div>
12     </div>
13     <div class="col-sm-10">
14         <input type="text" id="w-input" class="form-control" placeholder="请输入或选择体重">
15         <div class="selInput" id="weight">
16             <ul>
17                 <li>50kg</li>
18                 <li>40kg</li>
19             </ul>
20         </div>
21     </div> 

css代码:

 1 .col-sm-10{
 2             position: relative;
 3         }
 4         input{
 5             display: block;
 6             width: 130px;
 7             height: 30px;
 8             line-height: 30px;
 9         }
10         .selInput{
11             display: none;
12             position: absolute;
13             top: 30px;
14             left:8px;
15             width: 130px;
16             line-height: 30px;
17             z-index: 2;
18             background: #fff;
19         }
20         .selInput ul{
21             padding: 0;
22             margin: 0;
23             list-style: none;
24         }

第一次尝试的时候以为只要判断input的点击和ul的显示与隐藏就行,结果发现出了问题,也把第一次的代码贴出来好做对比

 1 function ChoseAndInput(i,u){
 2         this.i = i;
 3         this.u = u;
 4     }
 5     ChoseAndInput.prototype = {
 6         canInput:function(){
 7           $(this.i).click(function(){
 8             $(this.u).show();
 9             $(this.i).bind(‘input propertychange‘,function(){ //给input绑定oninput onpropertychange事件 判断input框的值是否改变 如果改变就隐藏ul
10               $(this.u).hide();
11             }.bind(this))
12             console.log(123)
13           }.bind(this))
14
15         },
16         canChose:function(){
17           $(this.u).click(function(e){
18             var val = $(e.target).text();
19             $(this.i).val(val);
20             $(this.u).hide();
21           }.bind(this))
22         }
23     }
24     var height = new ChoseAndInput(‘#h-input‘,"#height");
25     height.canInput();
26     height.canChose();
27
28     var weight = new ChoseAndInput(‘#w-input‘,"#weight");
29     weight.canInput();
30     weight.canChose();

发现了问题:就是点击input后ul显示,但是此时如果不输入也不选择就让input失去了焦点,发现ul就不会隐藏了,这个问题也确实解决了好久,最后发现给document绑定click事件,判断一下点击的元素是不是可输入也可选择的那个下拉框就好,最终的js代码如下:

 1 $(function(){
 2         $(document).bind(‘click‘, function(e){
 3             var e=e||window.event;//浏览器兼容性
 4             var elem = e.target || e.srcElement;
 5             var $sbling = $(elem).next(); //当前input框的下一个兄弟元素
 6             if($sbling && $sbling.attr(‘class‘)==‘selInput‘){//判断点击的元素是不是需要选择或者输入的下拉框
 7                 $(‘.selInput‘).hide(); //下拉框都隐藏
 8                 $sbling.show(); //只有当前input下的下拉框才显示
 9                 return;
10             }
11             $(‘.selInput‘).hide();
12         })
13     })
14     function ChoseAndInput(i,u){
15         this.i = i;
16         this.u = u;
17     }
18     ChoseAndInput.prototype = {
19         canInput:function(){
20           $(this.i).click(function(){
21             $(this.u).show();
22             $(this.i).bind(‘input propertychange‘,function(){ //给input绑定oninput onpropertychange事件 判断input框的值是否改变 如果改变就隐藏ul
23               $(this.u).hide();
24             }.bind(this))
25             console.log(123)
26           }.bind(this))
27
28         },
29         canChose:function(){
30           $(this.u).click(function(e){
31             var val = $(e.target).text();
32             $(this.i).val(val);
33             $(this.u).hide();
34           }.bind(this))
35         }
36     }
37     var height = new ChoseAndInput(‘#h-input‘,"#height");
38     height.canInput();
39     height.canChose();
40
41     var weight = new ChoseAndInput(‘#w-input‘,"#weight");
42     weight.canInput();
43     weight.canChose();

最终结果就是这样了,功能是实现了,不过应该还有改进的地方,所以写出来让大家帮忙看看,提一些意见^_^

时间: 2024-10-12 07:42:18

可输入可选择的input的相关文章

My97设置开始、结束 时间区间及输入框不能输入只能选择的方法

时间区间开始: <input type="text" id = "first_time" name="first_time" value="${first_time }" onFocus = "WdatePicker({maxDate:'#F{$dp.$D(\'last_time\')||\'%y-%M-%d\'}',dateFmt:'yyyy-MM-dd'})"> 时间区间结束: <in

类似倒圆角方法输入半径选择实体 kword

ads_name ename; ads_point adspt; acedInitGet(NULL, TEXT("R")); while (1) { int rc = acedEntSel(_T("\n选择底层直线或 [圆形半径(R)]:"), ename, adspt); if (rc == RTNORM || rc == RTKWORD) { if (rc == RTKWORD) { if (dDefvalue == 0) { dDefvalue = 10; }

Android输入控件经典—Input Controls【装】

输入控件是应用程序用户接口的一类交互式组件.Android系统提供了大量可供大家在UI中使用的输入控件,比如按钮.文本编辑空间.复选框.单选框以及各种对话框等. 基本输入控件 下面我们通过一个个人设置页面的例子讲解输入控件的基本用法. 先看界面效果,如图10-6所示. ▲图10-6  控件示例界面 主界面main.xml 1.   <?xml version="1.0" encoding="utf-8"?> 2.   <LinearLayout 3

转 怎么禁止输入框记录输入记录,双击input出现输入过的记录

有过表单设计经验的朋友肯定知道,当我们在浏览器中输入表单信息的时候,往往input文本输入框会记录下之前提交表单的信息,以后每次只要双击input文本输入框就会出现之前输入的文本,这样有时会觉得比较方便,但有时也会暴露用户的隐藏数据,input表单输入框不记录输入过信息的方法. 其实方法很简单,只需要在input文本输入框中加一条autocomplete="off"属性即可,相关代友如下所示: <input type="text" name="xm&

28.json数组,select选择,input输出对应数据

效果:选择对应的车类,下面的input会实时出现车价. html: <form action="" class="priceModelform1"> <!-- select选择  motorcycle1 --> <select class="motorcycle1" name="motorcycle1" id="motorcycle1" onchange="motor

python 字符串输入、输出函数print input raw_input

一.输出print print输出是以不带引号的输出.(用户所见的输出) 二.input()  和  raw_input()输入函数 raw_input()会把输入数据转换成字符串形式: ------------------------------------------------------------------------------------ input()不会把输入的数据转换成字符串形式. ----------------------------------------------

编辑表格输入内容、根据input输入框输入数字动态生成表格行数、编辑表格内容提交传给后台数据处理

记录自己学习做的东西,写的小demo,希望对大家也有帮助! 代码如下: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> </head> <link rel="stylesheet" href="../../js/bootstrap-3.3.7-dist/css/bootstrap

html禁止文本输入框记录输入记录,单击input出现输入过的记录

其实方法很简单,只需要在input文本输入框中加一条autocomplete="off"属性即可. <input type="text" name="htmer" autocomplete="off" /> 原文地址:https://www.cnblogs.com/sea-stream/p/9727261.html

税号输入框 将input框中的输入自动转化成半角大写

这两天出了这么一个需求,输入税号的时候,需要自动将其转化为半角大写,并且阻止标点符号中文汉字的输入.(下面会有:全半角转换.文本框选中.光标位置判断.设置光标位置 这些内容) 然后我就开始了慢慢查找资料之路. 首先查了全半角的区别以及如何转化. var str = "中文;:a"; for (var i = 0; i < str.length; i++) { if (str[i].match(/[\u0000-\u00ff]/)) { console.log("半角字符