最近項目中涉及到一個小功能,客戶在選擇供應商時,由於供應商數目較多(大概3000個左右),因此直接生成下拉框顯然不現實,所以就更換解決方案,打算借助HTML5新增的標籤datalist來實現輸入中文/拼音首字母時,自動進入數據庫模糊查詢,並返回相應的結果,生成datalist,由於在輸入框中的輸入內容髮生變化時,datalist會自動觸發下拉框,所以使用起來比select更便捷。前端部分代碼如下:
Html Code:
<!DOCTYPE html> <html lang=en> <head id=head> <title>庫存下拉框測試</title> <meta charset=utf-8> <meta content=IE=edge,chrome=1 http-equiv =X-UA-Compatible> <meta name=viewport content=width=device-width, initial-scale=1.0> <meta name=description content=> <meta name=author content=> <script src=../. ./Common/content/jquery-1.7.2.min.jstype=text/javascript></script> <script src=../../Common/pages/include.js class=include type=text/javascript> </script> <script src=../../Common/js/AjaxJson.js type=text/javascript></script> <script src=../../Common/js/Setting.js type= text/javascript></script> <script src=../../Common/js/Paging.js type=text/javascript></script> <script src=../../Js/warehouseManage/testyy .js type=text/javascript></script> </head> <body class=> <!--<![endif]--> <div class=navbar></div> <div class=sidebar-nav ></div> <div class=content> <div class=header><h1 id=ADU class=page-title>下拉框測試</h1></div> <div class=container-fluid> <div class =row-fluid> <!-- --------------------------多條件查詢------------ --------------------------------- --> <div class=well id=searchDemo> <p>測試數據(默認均為d00001):<br> 崑山市大陸配件有限公司ksdlpjyxgs <br> 億真企業有限公司yzqyyxgs <br> 泰州市安謄軸皮廠(集團廠) tzsatzpc(jtc) </p> </ div> 按供應商名動態匹配(中文或者拼音均可): <input list=bro id=name oninput=this.value=this.value.replace(/^ +| +$/g,'');search ('name','bro','name') > <datalist id=bro></datalist> </div> </div> </div> </body> <!-- ------ -----------------footer-------------------------- --> <footer class =foot></footer> </html>JavaScript Code:
var listobj=null; //datalist對象var requestItem=null; //後台返回的json數據中所需的key值var inputContent=null; //input標籤對象/**search()說明: * inputID: input標籤的ID * datalistID: datalist標籤的ID * itemName: 後台返回的json數據中所需的key值(僅需表格中中文字段的屬性名) * */ function search(inputID,datalistID,itemName) { inputContent=document .getElementById(inputID); var datalist=document.getElementById(datalistID); //防止在無輸入內容的情況下產生遺留下拉選項if(inputContent.value.length==0||inputContent.value== ) { var sub=datalist.childNodes; if(sub.length>0) { for (var i =sub.length-1; i>=0 ; i--) { datalist.removeChild(sub[i]); } } listobj= null; requestItem=null; inputContent.value=null; return false; } //全局變量賦值listobj=datalist; requestItem=itemName; var data=; var url=; if(/^[a-zA-Z]*$ /.test(inputContent.value)) { //檢測出是拼音首字母data=type=searchWords¶m=+inputContent.value; //注意:data-----------需要自定義url=baseurl + /servlet/ListDemo; //注意:url-----------需要自定義sendRequest(post,url,data,getResult); } else if (/^[/u4e00-/ u9fa5]*$/.test(inputContent.value)) { //檢測出是中文data=type=searchChinese¶m=+inputContent.value; //注意:data-----------需要自定義url=baseurl + /servlet/ListDemo; //注意:url-----------需要自定義sendRequest(post,url,data,getResult); } } //填寫倉庫下拉框function getResult(result) { var data=result; var JData=eval(( + data + )); var maxlength=10; //註釋:maxlength保證過多查詢結果下只顯示10條if(JData.length<=10 ) { maxlength=JData.length; } var sub=listobj.childNodes; for (var i =sub.length-1; i>=0 ; i--) { listobj.removeChild(sub[i]); //清空datalist所有的下拉選項} if(JData.length==0) //沒有查詢結果{ alert(沒有符合條件的結果,請重輸); inputContent.value=; //清空input輸入框的值return false; } for (var i=0;i<maxlength;i++) { var obj=document.createElement(option); var indexobj=JData[i]; if(/^[a-zA-Z]*$/.test( inputContent.value)) { obj.value=indexobj[requestItem]; obj.innerHTML=inputContent.value; } if (/^[/u4e00-/u9fa5]*$/.test(inputContent.value)) { obj.value =indexobj[requestItem]; } listobj.appendChild(obj); } var suffix=document.createElement(option); suffix.value= ; suffix.innerHTML=輸入更多有關+inputContent.value+的信息; listobj.appendChild(suffix ); return false; }以上所述是小編給大家介紹的Html5新標籤datalist實現輸入框與後台數據庫數據的動態匹配,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VeVb武林網網站的支持!