autocomplete是jqueryUI的一个插件,能够实现自动填充的功能。javascript
要点:一、应用了母版页,因此取页面上控件的ID时与通常方法不一样css
二、因为用了ajax的updatepanel,因此会出现第一次能够正常显示,updatepaenl更新页面之后就不行了(页面刷新后第二次就没法正常使用)的问题html
三、在ModalPopupExtender关联的PANEL中应用时,autocomplete下拉框总是显示在底层,被PANEL覆盖,没法正常使用java
本次用法:在界面上updatepanel中放置两个TEXTBOX控件:txtBox一、txtBox二、查询按钮;在ModalPopupExtender关联的PANEL中放置txtBox三、及保存按钮jquery
txtBox1中放置从数据库中读取的记录值,以逗号分隔;txtBox二、txtBox3关联autocomplete,显示一样的内容。在脚本中实现将txtBox1中的值传给数组,而后添加到autocomplete下拉框,而后分别关联到txtBox二、txtBox3。ajax
实现:数据库
在源中添加引用及实现脚本数组
<%@ Page Title="测试" Language="C#" MasterPageFile="~/Mast.master" AutoEventWireup="true" CodeFile="Test.aspx.cs" Inherits="WeihuJzxDtxx" %> <%@ Register assembly="AjaxControlToolkit" namespace="AjaxControlToolkit" tagprefix="cc1" %> <asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server"> 能够隐隐约约网上的也能够引用本身本地的(本地的注意js前是/不是~/),样式也能够在母版页中引用 <link rel="stylesheet" href="http://code.jquery.com/ui/1.10.3/themes/smoothness/jquery-ui.css" /> <%--<link rel="stylesheet" href="/js/jquery-ui.css" />--%> <%--<link rel="stylesheet" href="/js/jquery.ui.autocomplete.css" />--%> <script src="http://code.jquery.com/jquery-1.9.1.js"></script> <script src="http://code.jquery.com/ui/1.10.3/jquery-ui.js"></script> <asp:ScriptManagerProxy ID="ScriptManagerProxy1" runat="server"> </asp:ScriptManagerProxy> <script type ="text/javascript">
//下面一句实现页面局部刷新时autocomplete任然有效 Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(onPageLoaded); function onPageLoaded() { var getValue = document.getElementById('<%=txtBox1.ClientID%>').value; var availableTags = getValue.split(","); $("#ctl00_ContentPlaceHolder1_txtBox2").autocomplete({ source: availableTags }); $("#ctl00_ContentPlaceHolder1_txtBox3").autocomplete({ source: availableTags }); }; </script>
脚本中取应用母版页的页面上的控件的ID:document.getElementById('<%=txtBox1.ClientID%>')或直接写为ctl00_ContentPlaceHolder1_txtBox2测试
避免单击txtBox3时autocomplete下拉框被遮挡:修改jquery-ui.css中autocomplete的值以下 ,增长z-index: 100000000000000000000000000000000;
使其始终保持在最上层(日历控件被遮挡也是采用这种修改方法)ui
.ui-autocomplete { position: absolute; top: 0; left: 0; cursor: default; z-index: 100000000000000000000000000000000; }
在母版中引用本地放置的样式方法
<link href="App_Themes/jquery-ui.css" rel="stylesheet" type="text/css" />
参考文件1:
http://jqueryui.com/autocomplete/
<!doctype html> <html lang="en"> <head> <meta charset="utf-8" /> <title>jQuery UI Autocomplete - Default functionality</title> <link rel="stylesheet" href="http://code.jquery.com/ui/1.10.3/themes/smoothness/jquery-ui.css" /> <script src="http://code.jquery.com/jquery-1.9.1.js"></script> <script src="http://code.jquery.com/ui/1.10.3/jquery-ui.js"></script> <link rel="stylesheet" href="/resources/demos/style.css" /> <script> $(function() { var availableTags = [ "ActionScript", "AppleScript", "Asp", "BASIC", "C", "C++", "Clojure", "COBOL", "ColdFusion", "Erlang", "Fortran", "Groovy", "Haskell", "Java", "JavaScript", "Lisp", "Perl", "PHP", "Python", "Ruby", "Scala", "Scheme" ]; $( "#tags" ).autocomplete({ source: availableTags }); }); </script> </head> <body> <div class="ui-widget"> <label for="tags">Tags: </label> <input id="tags" /> </div> </body> </html>
参考文件2:
http://bbs.csdn.net/topics/390008006
<asp:ScriptManager ID="ScriptManager1" runat="server"> </asp:ScriptManager> <script type="text/javascript" language="javascript"> //给ScriptManager的实例 添加加载成功后须要执行的js方法 Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(onPageLoaded); function onPageLoaded(sender, args) { alert("here"); function formatItemForLog(row){ return row[0]; } $("#auto").autocomplete("GetProjectPhasesList.aspx?UnitID=18",{ scroll:true, formatItem:formatItemForLog, cacheLength:0, delay:500, width:'150px', selectFirst:false, notRedirect:false }); alert("here2") } </script>