标签:
需求为在一个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,不是很合适
标签:
原文地址:http://www.cnblogs.com/wonder223/p/4984334.html