"点击input输入框弹出选择层"的实现

需求为在一个Repeat中的text增加提示选项,可以直接输入,也可以点击选项给textBox赋值。而且是2个不同的text需要2个不同的提示选项。

首先在网上找,我找到了一个大概可用的控件,网址如下:

http://www.51xuediannao.com/js/jquery/jquery_input_tanchu/popDiv.html

改造之后的代码如下:

  1 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
  2
  3 <!DOCTYPE html>
  4
  5 <html xmlns="http://www.w3.org/1999/xhtml">
  6 <head runat="server">
  7     <title>Test</title>
  8     <style type="text/css">
  9         body {
 10             font-size: 12px;
 11         }
 12
 13         .selectItemcont {
 14             padding: 8px;
 15         }
 16
 17         #selectUnit {
 18             background: #FFF;
 19             position: absolute;
 20             top: 0px;
 21             left: center;
 22             border: 1px solid #000;
 23             overflow: hidden;
 24             width: 240px;
 25             z-index: 1000;
 26         }
 27
 28         #selectCountry {
 29             background: #FFF;
 30             position: absolute;
 31             top: 0px;
 32             left: center;
 33             border: 1px solid #000;
 34             overflow: hidden;
 35             width: 240px;
 36             z-index: 1000;
 37         }
 38
 39         .selectItemtit {
 40             line-height: 20px;
 41             height: 20px;
 42             margin: 1px;
 43             padding-left: 12px;
 44         }
 45
 46         .bgc_ccc {
 47             background: #E88E22;
 48         }
 49
 50         .selectItemleft {
 51             float: left;
 52             margin: 0px;
 53             padding: 0px;
 54             font-size: 12px;
 55             font-weight: bold;
 56             color: #fff;
 57         }
 58
 59         .selectItemright {
 60             float: right;
 61             cursor: pointer;
 62             color: #fff;
 63         }
 64
 65         .selectItemcls {
 66             clear: both;
 67             font-size: 0px;
 68             height: 0px;
 69             overflow: hidden;
 70         }
 71
 72         .selectItemhidden {
 73             display: none;
 74         }
 75     </style>
 76     <script src="JS/jquery-1.3.1.js"></script>
 77     <script src="JS/jquery.bgiframe.js"></script>
 78 </head>
 79 <body>
 80     <form id="form1" runat="server">
 81         <div>
 82             <table>
 83                 <tr>
 84                     <th>Unit</th>
 85                     <th>Country</th>
 86                 </tr>
 87                 <asp:Repeater ID="rptData" runat="server">
 88                     <ItemTemplate>
 89                         <tr>
 90                             <td>
 91                                 <input type="text" value=‘<%#Eval("Unit")%>‘ id="txtUnit" name="txtUnit"/>
 92                             </td>
 93                             <td>
 94                                 <input type="text" value=‘<%#Eval("Country")%>‘ id="txtCountry" name="txtCountry"/>
 95                             </td>
 96                         </tr>
 97                     </ItemTemplate>
 98                 </asp:Repeater>
 99             </table>
100         </div>
101         <div id="selectUnit" class="selectItemhidden">
102             <div id="selectItemAd" class="selectItemtit bgc_ccc">
103                 <h2 id="selectItemTitle" class="selectItemleft">请选择单位</h2>
104                 <div id="selectItemClose" class="selectItemright">关闭</div>
105             </div>
106             <div id="selectItemCount" class="selectItemcont">
107                 <div id="selectSub">
108                     <input type="checkbox" name="cr01" id="cr01" value="KG" /><label for="cr01">千克</label>
109                     <input type="checkbox" name="cr02" id="cr02" value="PCS" /><label for="cr02">个</label>
110                     <input type="checkbox" name="cr03" id="cr03" value="KM" /><label for="cr03">千米</label>
111                 </div>
112             </div>
113         </div>
114         <div id="selectCountry" class="selectItemhidden">
115             <div id="selectItemAd" class="selectItemtit bgc_ccc">
116                 <h2 id="selectItemTitle" class="selectItemleft">请选择国家地区</h2>
117                 <div id="selectItemClose" class="selectItemright">关闭</div>
118             </div>
119             <div id="selectItemCount" class="selectItemcont">
120                 <div id="selectSub">
121                     <input type="checkbox" name="cr04" id="cr04" value="CN" /><label for="cr04">中国</label>
122                     <input type="checkbox" name="cr05" id="cr05" value="HK" /><label for="cr05">香港</label>
123                     <input type="checkbox" name="cr06" id="cr06" value="DE" /><label for="cr06">德国</label>
124                     <input type="checkbox" name="cr07" id="cr07" value="US" /><label for="cr07">美国</label>
125                 </div>
126             </div>
127         </div>
128     </form>
129 </body>
130 <script type="text/javascript">
131     jQuery.fn.selectCity = function (targetId) {
132         var _seft = this;
133         var targetId = $(targetId);
134
135         this.click(function () {
136             var A_top = $(this).offset().top + $(this).outerHeight(true);  //  1
137             var A_left = $(this).offset().left;
138             targetId.bgiframe();
139             targetId.show().css({ "position": "absolute", "top": A_top + "px", "left": A_left + "px" });
140         });
141
142         targetId.find("#selectItemClose").click(function () {
143             targetId.hide();
144         });
145
146         targetId.find("#selectSub :checkbox").click(function () {
147             targetId.find(":checkbox").attr("checked", false);
148             $(this).attr("checked", true);
149             _seft.val($(this).val());
150             targetId.hide();
151         });
152
153         $(document).click(function (event) {
154             if (event.target.id != _seft.selector.substring(1)) {
155                 targetId.hide();
156             }
157         });
158
159         targetId.click(function (e) {
160             e.stopPropagation(); //  2
161         });
162
163         return this;
164     }
165
166     $(function () {
167         //test1:
168         $("#txtUnit").selectCity("#selectUnit");
169         //test2:
170         $("#txtCountry").selectCity("#selectCountry");
171     });
172 </script>
173 </html>

我在使用过程中发现问题:1)repeat里面的第二行不能显示提示 2)输入值和提示选项没有互相赋值(直接修改输入框的值,弹出的提示没有改变) 3)使用checkBox不太专业,这个应该是radio ,4)User提出,如果text中有人工输入,提示就需要自动消失

2)3)4)都很容易解决,1)花费了一些时间,最后终于解决了,也解决了原来的作者的两个一样的提示选项,需要两个不同的DIV的问题。

  1 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
  2
  3 <!DOCTYPE html>
  4
  5 <html xmlns="http://www.w3.org/1999/xhtml">
  6 <head runat="server">
  7     <title>Test</title>
  8     <style type="text/css">
  9         body {
 10             font-size: 12px;
 11         }
 12
 13         .selectItemcont {
 14             padding: 8px;
 15         }
 16
 17         #selectUnit {
 18             background: #FFF;
 19             position: absolute;
 20             top: 0px;
 21             left: center;
 22             border: 1px solid #000;
 23             overflow: hidden;
 24             width: 240px;
 25             z-index: 1000;
 26         }
 27
 28         #selectCountry {
 29             background: #FFF;
 30             position: absolute;
 31             top: 0px;
 32             left: center;
 33             border: 1px solid #000;
 34             overflow: hidden;
 35             width: 240px;
 36             z-index: 1000;
 37         }
 38
 39         .selectItemtit {
 40             line-height: 20px;
 41             height: 20px;
 42             margin: 1px;
 43             padding-left: 12px;
 44         }
 45
 46         .bgc_ccc {
 47             background: #E88E22;
 48         }
 49
 50         .selectItemleft {
 51             float: left;
 52             margin: 0px;
 53             padding: 0px;
 54             font-size: 12px;
 55             font-weight: bold;
 56             color: #fff;
 57         }
 58
 59         .selectItemright {
 60             float: right;
 61             cursor: pointer;
 62             color: #fff;
 63         }
 64
 65         .selectItemcls {
 66             clear: both;
 67             font-size: 0px;
 68             height: 0px;
 69             overflow: hidden;
 70         }
 71
 72         .selectItemhidden {
 73             display: none;
 74         }
 75     </style>
 76     <script src="JS/jquery-1.3.1.js"></script>
 77     <script src="JS/jquery.bgiframe.js"></script>
 78 </head>
 79 <body>
 80     <form id="form1" runat="server">
 81         <div>
 82             <table>
 83                 <tr>
 84                     <th>Unit</th>
 85                     <th>Country</th>
 86                 </tr>
 87                 <asp:Repeater ID="rptData" runat="server">
 88                     <ItemTemplate>
 89                         <tr>
 90                             <td>
 91                                 <input type="text" value=‘<%#Eval("Unit")%>‘ id="txtUnit" name="txtUnit" />
 92                             </td>
 93                             <td>
 94                                 <input type="text" value=‘<%#Eval("Country")%>‘ id="txtCountry" name="txtCountry" />
 95                             </td>
 96                         </tr>
 97                     </ItemTemplate>
 98                 </asp:Repeater>
 99             </table>
100         </div>
101         <div id="selectUnit" class="selectItemhidden">
102             <div id="selectItemAd" class="selectItemtit bgc_ccc">
103                 <h2 id="selectItemTitle" class="selectItemleft">请选择单位</h2>
104                 <div id="selectItemClose" class="selectItemright">关闭</div>
105             </div>
106             <div id="selectItemCount" class="selectItemcont">
107                 <div id="selectSub">
108                     <input type="radio" name="cr01" id="cr01" value="KG" /><label for="cr01">千克</label>
109                     <input type="radio" name="cr02" id="cr02" value="PCS" /><label for="cr02">个</label>
110                     <input type="radio" name="cr03" id="cr03" value="KM" /><label for="cr03">千米</label>
111                 </div>
112             </div>
113         </div>
114         <div id="selectCountry" class="selectItemhidden">
115             <div id="selectItemAd" class="selectItemtit bgc_ccc">
116                 <h2 id="selectItemTitle" class="selectItemleft">请选择国家地区</h2>
117                 <div id="selectItemClose" class="selectItemright">关闭</div>
118             </div>
119             <div id="selectItemCount" class="selectItemcont">
120                 <div id="selectSub">
121                     <input type="radio" name="cr04" id="cr04" value="CN" /><label for="cr04">中国</label>
122                     <input type="radio" name="cr05" id="cr05" value="HK" /><label for="cr05">香港</label>
123                     <input type="radio" name="cr06" id="cr06" value="DE" /><label for="cr06">德国</label>
124                     <input type="radio" name="cr07" id="cr07" value="US" /><label for="cr07">美国</label>
125                 </div>
126             </div>
127         </div>
128     </form>
129 </body>
130 <script type="text/javascript">
131     jQuery.fn.selectCity = function (targetId) {
132         var _seft = this;
133         var targetId = $(targetId);
134
135         targetId.click(function (e) {
136             e.stopPropagation(); //  2
137         });
138
139         return this.each(function () {
140             var $this = $(this);
141             $this.click(function () {
142                 $(".selectItemhidden").hide();
143                 var A_top = $(this).offset().top + $(this).outerHeight(true);  //  1
144                 var A_left = $(this).offset().left;
145                 targetId.bgiframe();
146                 targetId.show().css({ "position": "absolute", "top": A_top + "px", "left": A_left + "px" });
147
148                 targetId.find(":radio").attr("checked", false);
149                 targetId.find(":radio").each(function () {
150                     if ($(this).val() == $this.val()) {
151                         $(this).attr("checked", true);
152                     }
153                 });
154
155                 targetId.find("#selectItemClose").click(function () {
156                     targetId.hide();
157                 });
158
159                 targetId.find("#selectSub :radio").unbind();
160                 targetId.find("#selectSub :radio").click(function () {
161                     targetId.find(":radio").attr("checked", false);
162                     $(this).attr("checked", true);
163                     $this.val($(this).val());
164                     targetId.hide();
165                 });
166
167                 $(document).unbind(‘click‘);
168                 $(document).click(function (event) {
169                     if (event.target.id != $this.attr("id")) {
170                         targetId.hide();
171                     }
172                 });
173             })
174             $this.keydown(function () { $(".selectItemhidden").hide(); });
175         });
176     }
177
178     $(function () {
179         //test1:
180         $("input[name=‘txtUnit‘]").selectCity("#selectUnit");
181         //test2:
182         $("input[name=‘txtCountry‘]").selectCity("#selectCountry");
183     });
184 </script>
185 </html>

这个还有代完善的地方:

1)radio也不是很专业,如果碰到项次内容长短不齐,项次很多,会变成乱七八糟的,而我在实际使用的时候,我用到了<br/>来换行,但是点击非文字的部分不会选中,只能使用空格填充,中英文夹杂在一起的时候进行空格补齐那是件不可能完成的任务。最好还是需要修改为<li>

2)在JS代码中使用了$(".selectItemhidden")来选择所有的选项DIV,不是很合适

时间: 2024-08-06 07:31:08

"点击input输入框弹出选择层"的实现的相关文章

JQuery弹出层,点击按钮后弹出遮罩层,有关闭按钮

<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>jQuery弹出层效果</title> <meta content="网页特效,特效代码,jQuery,css特效,Js代码,广告幻灯,图片切换" name="keywords" /> <meta content="

JS 点击按钮后弹出遮罩层,有关闭按钮

<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>jQuery弹出层效果</title> <meta content="网页特效,特效代码,jQuery,css特效,Js代码,广告幻灯,图片切换" name="keywords" /> <meta content="

移动端input获取焦点弹出输入框时影响fixed布局的问题

最近在做移动端项目的时候遇到的一个问题,在点击input获取焦点弹出输入框进行输入后,再次点击input输入框时,意外的事情发生了, 页面突然跳转到确定按钮跳转的页面了,刚开始以为是点击穿透导致的,朝着这个方向一直没有等到解决... 经过反复研究,发现第二次点击input 时,上面有一个隐形的按钮,这是怎么回事,确定按钮怎么就跑到上面去了呢,原来是由于最外层 使用了fixed布局,而第一次点击input获取焦点时,移动端默认弹出的输入框会将fixed布局的元素顶上去. 解决办法: 1.如果使用的

点击文本框弹出可供选择的checkbox复选框代码实例

点击文本框弹出可供选择的checkbox复选框代码实例:本章节分享一段代码实例,它能够点击文本框的时候,能够弹出下拉的checkbox复选框,选中复选框就能够将值写入文本框中,可能在实际应用中的效果没有这么直白简单,不过可以作为一个例子演示,以便于学习者理解和扩展.代码如下: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="author&qu

原生js日期时间插件鼠标点击文本框弹出日期时间表格选择日期时间

原文出处 (这是我从互联网上搜来的,感觉能满足各方面的需求.个人感觉挺不错的,所以后期修改了一下向大家推荐!) 效果图: html代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org

手机调用系统的拍照和裁剪功能,如果界面有输入框EditText,在一些手机会出现点击EditText会弹出输入法,却不能输入的情况。

code如下: //Longest common sequence, dynamic programming method void FindLCS(char *str1, char *str2) { if(str1 == NULL || str2 == NULL) return; int length1 = strlen(str1)+1; int length2 = strlen(str2)+1; int **csLength,**direction;//two arrays to recor

dialog弹出框 点击周围空白处弹出层不自动消失

dialog.setCanceledOnTouchOutside(false);// 设置点击屏幕Dialog不消失 dialog弹出框 点击周围空白处弹出层不自动消失

Android点击列表后弹出输入框,所点击项自动滚动到输入框上方(类似微信的评论)

Android点击列表后弹出输入框,所点击项自动滚动到输入框上方 使用微信的朋友圈会发现,点击某一条评论后输入框会弹出来,然后所点击的那一项会自动地滚动到输入框上方的位置,这样如果开始所点击的评论在屏幕很下方的话,就不会被输入框遮住,虽然微信这一点在我的MX2频繁点几次后滚动的位置就完全错误了,但据说在有些机型上效果还不错,还有其他地方可能会有类似的需求,比如登录时软键盘可能会把登录按钮遮住. 要实现这个功能需要注意的地方主要有两点: 什么时候进行滚动操作,以及有可能还需要在输入框消失时回滚回去

Jquery 点击图片在弹出层显示大图

http://blog.csdn.net/wongwaidah/article/details/28432427(案例链接出处,本人只是转载收藏) <html> <head> <meta charset="utf-8"> <script src="http://libs.baidu.com/jquery/1.9.0/jquery.js"type="text/javascript"></scri