首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 如何做到让下拉列表框获得焦点后就自动下拉分数不是问题 [已结贴,结贴人:conceitblue]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-01-15 13:42:35 楼主
    如何做到让下拉列表框获得焦点后就自动下拉  希望能象SOHU登陆那样 输入字符以后会自动的在下拉菜单显示相关的数据库信息  我找了一些关于这个方面的列子  无奈水平有限  无法实现  有些看不懂  那我先把我原来看到的代码贴出来让大家看  有一个已经已经实现了  不过没有连接数据库 在AJAX区我已经发了帖子了 可惜没人回答我 我只好这里发了 看有那位高手帮助一下 谢谢
    那个代码的内容在这里
    http://topic.csdn.net/u/20080115/10/8432490a-550e-46b8-a0f6-f320cf71373c.html
    大家可以去看看
    200  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • only_endure
    • 等级:
    发表于:2008-01-15 13:48:371楼 得分:0
    jf
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-01-15 14:30:422楼 得分:0
    学习,我也要做这个
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • qiangv
    • 等级:
    发表于:2008-01-15 14:48:353楼 得分:0
    不可能的。自己模拟一个吧。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-01-15 14:58:364楼 得分:0
    ajax
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-01-15 16:54:135楼 得分:100
    这个是应用在DEV的WEB控件的文本框上的,不是标准的TexstBox(标准的没这么复杂).
    这个没有试用ajaxpro.2.dll而用的标准的ajax,建议你试用ajaxpro.2.dll,你可以去下载一个.
    JScript code
    //-Private-全局变量定义区 var m_ClickItem = false; //单击下拉内容选择条目时Dev控件不做任何操作 var m_SelectRow = ""; //当前选择的行 var m_ItemSelectColor = "#FFF3BD"; //下拉条目焦点行颜色 var m_ItemMoveColor = "#FFF7E7"; //下拉条目鼠标指示行颜色 //鼠标进入下拉条目 function _onmouseover() { m_ClickItem = true; srcElem = window.event.srcElement; srcElem.onselectstart = new Function('return false'); srcElem.bgColor = m_ItemMoveColor; } //鼠标离开下拉条目 function _onmouseout() { srcElem = window.event.srcElement; if(srcElem.id == m_SelectRow) srcElem.bgColor = m_ItemSelectColor; else srcElem.bgColor = ""; m_ClickItem = false; } //条目单击 function _onclick(thisObj) { srcElem = window.event.srcElement; thisObj.GetDev().SetText(srcElem.innerText); m_ClickItem = false; thisObj.HiddenDropDown(); } //下拉框架Div(鼠标进入Div) function _Divonmouseover() { m_ClickItem = true; } //下拉框架Div(鼠标离开Div) function _Divonmouseout() { m_ClickItem = false; //thisObj.GetDev().FocusEditor(); } //下拉框架Div失去焦点 function _DivBlur(thisObj) { if(!m_ClickItem) thisObj.HiddenDropDown(); } //给出选择行的内容 function _GetText() { if(m_SelectRow != "") { var src = document.getElementById(m_SelectRow); if(src) { return src.innerText; } } return ""; } //选择行 function _Select(CellNum,thisObj) { CellName = thisObj.GetDev().name + CellNum; var src = document.getElementById(CellName); if(src != null) { src.bgColor = m_ItemSelectColor; if(m_SelectRow != "" && m_SelectRow != CellName) { var srcOld = document.getElementById(m_SelectRow); if(srcOld != null) { srcOld.bgColor = ""; } } m_SelectRow = CellName; thisObj.GetBorderDiv().scrollTop = (src.Num - 1 ) * thisObj.GetItemHeight(); } } //焦点上移一条 function _MovePrevious(thisObj) { var src = document.getElementById(m_SelectRow); if(src) { var value = 0; value = src.Num; _Select(--value, thisObj); } } //焦点下移一条 function _MoveNext(thisObj) { var src = document.getElementById(m_SelectRow); if(src) { var value = 0; value = src.Num; _Select(++value, thisObj); } } 太长 待续...
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-01-15 16:58:036楼 得分:0
    JScript code
    //Ajax 下拉动态提示类 //使用示例: //var newAjaxDropDown = new AjaxDropDown("WebFormTest.aspx?", ASPxTextBoxTest); //newAjaxDropDown.Init(newAjaxDropDown); function AjaxDropDown(Url, DevControl) { //-Private---AjaxDropDown类变量定义区 this.m_Div; //Div对象 this.m_TabBody; //TableBody对象 this.m_ItemHeight; //下拉部分条目高度 this.m_DivBackGroundColor = "#FFFFFF"; //框架Div的背景颜色 this.m_DivBorder = "1px solid #BDB68C"; //框架Div的边框设置 this.m_DivOverflowX = "auto"; //框架Div的横向滚动条设置 this.m_DivOverflowY = "auto"; //框架Div的纵向滚动条设置 this.m_MaxRow = 5; //最大行数 //-Private---AjaxDropDown类函数定义区 //创建DIV this._CreateDiv = function(thisObj) { var divName; divName = DevControl.name + "Div"; if (!document.getElementById(divName)) { var newDiv = document.createElement("div"); newDiv.setAttribute("id",divName); document.body.appendChild(newDiv); } //获取DIV对象的引用 this.m_Div = document.getElementById(divName); //对div设置格式 this.m_Div.style.backgroundColor = this.m_DivBackGroundColor; this.m_Div.style.border = this.m_DivBorder; this.m_Div.style.position = "absolute"; this.m_Div.style.overflowX = this.m_DivOverflowX; this.m_Div.style.overflowY = this.m_DivOverflowY; this.m_Div.style.zIndex = 10000; this.HiddenDropDown(); //对div附加事件 this.m_Div.onmouseover = function(){_Divonmouseover();}; this.m_Div.onmouseout = function(){_Divonmouseout();}; this.m_Div.onblur = function(){_DivBlur(thisObj);}; } // 计算Div左上角的位置以及宽度 this._SetDivPoint = function() { var DevControlTable = document.getElementById(DevControl.name); var x = DevControlTable.offsetLeft; var y = DevControlTable.offsetTop + DevControlTable.offsetHeight; var parent = DevControlTable; while (parent.offsetParent) { parent = parent.offsetParent; x += parent.offsetLeft; y += parent.offsetTop; } //由于Dev控件问题,所以x,y需要加1的偏移 x = x + 2; y = y + 1; this.m_Div.style.width = DevControlTable.offsetWidth + "px"; this.m_Div.style.left = x + "px"; this.m_Div.style.top = y + "px"; } //创建Table this._CreateTable = function() { var DropTable = document.createElement("table"); DropTable.id = DevControl.name + "Table"; DropTable.border = "0"; DropTable.width = "100%"; DropTable.cellSpacing = "0"; DropTable.style.tableLayout= "fixed"; this.m_TabBody = document.createElement("tbody"); DropTable.appendChild(this.m_TabBody); this.m_Div.appendChild(DropTable); } //创建条目 this._GreateTableItem = function(ItemText, Num, thisObj) { var DropRow = document.createElement("tr"); var DropCell = document.createElement("td"); DropRow.appendChild(DropCell); //条目id DropCell.id = DevControl.name + Num; //记载当前行数,方便上下移动选择行 DropCell.Num = Num; DropCell.innerHTML = "<nobr>" + ItemText + "</nobr>"; //为Item附加事件 DropCell.onmouseover = function(){_onmouseover();}; DropCell.onmouseout = function(){_onmouseout();}; DropCell.onclick = function(){_onclick(thisObj);}; //设置Item样式 DropCell.style.cursor = "hand"; this.m_TabBody.appendChild(DropRow); if(this.m_ItemHeight == 1) this.m_ItemHeight = DropCell.offsetHeight; } //调用 Ajax this._AjaxPage = function(SearchString) { var AjaxPage = new AjaxToPage(Url + SearchString); AjaxPage.Send(); return AjaxPage.GetValue(); } //DevControl事件(文本改变) this._TextChanged = function(source,e, thisObj) { if(!m_ClickItem) thisObj.CreateDropDown(thisObj, "ItemSearch=" + source.GetText()); } //DevControl事件(失去焦点) this._LostFocus = function(source,e, thisObj) { if(!m_ClickItem) thisObj.HiddenDropDown(); } //DevControl事件(按键抬起) this._KeyUp = function(source,e, thisObj) { if (e.keyCode == HK_ENTER) { var temp = _GetText(); if(temp != "") source.SetText(temp); thisObj.HiddenDropDown(); } } //DevControl事件(按键按下) this._KeyDown = function(source,e, thisObj) { if (e.keyCode == HK_UP) { _MovePrevious(thisObj); var temp = _GetText(); if(temp != "") source.SetText(temp); } if (e.keyCode == HK_DOWN) { _MoveNext(thisObj); var temp = _GetText(); if(temp != "") source.SetText(temp); } } //********************************************************************************************* //-Public---AjaxDropDown类函数定义区 //初始化 //参数 thisObj:创建的自身对象 this.Init = function(thisObj) { //为DevControl附加事件 DevControl.LostFocus.AddHandler(function(source,e){thisObj._LostFocus(source, e, thisObj);}); DevControl.KeyUp.AddHandler(function(source,e){thisObj._KeyUp(source, e, thisObj);}); DevControl.KeyDown.AddHandler(function(source,e){thisObj._KeyDown(source, e, thisObj);}); DevControl.TextChanged.AddHandler(function(source,e){thisObj._TextChanged(source, e, thisObj);}); this.m_ItemHeight=1; //创建DIV this._CreateDiv(thisObj); //创建表格 this._CreateTable(); } //下拉部分内容 this.CreateDropDown = function(thisObj, SearchString) { // 计算div左上角的位置以及宽度 this._SetDivPoint(); //创建XMl对象 var xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); //装载信息 xmlDoc.loadXML(this._AjaxPage(SearchString)); //查找元素节点 nodeList = xmlDoc.selectNodes("//dataset//table"); //如果表格中有内容则清除 while (this.m_TabBody.childNodes.length > 0) this.m_TabBody.removeChild(this.m_TabBody.childNodes[0]); var num = 1; for (var ii=0; ii<nodeList.length; ii++) { //创建条目 this._GreateTableItem(nodeList.item(ii).childNodes.item(1).text, num, thisObj); num++; } //设置最大行数,如果超过此行数,则出现滚动条 if(num > this.m_MaxRow) this.m_Div.style.height = this.m_MaxRow * this.m_ItemHeight; //默认选择第一行 _Select("1", thisObj); //显示下拉列表 this.ShowDropDown(); } //返回DevControl对象 this.GetDev = function() { return DevControl; } //返回Div边框对象 this.GetBorderDiv = function() { return this.m_Div; } //返回下拉条目高度 this.GetItemHeight = function() { return this.m_ItemHeight; } //显示下拉部分 this.ShowDropDown = function() { this.m_Div.style.visibility = "visible"; } //隐藏下拉部分 this.HiddenDropDown = function() { this.m_Div.style.visibility = "hidden"; } } 待续......
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-01-15 16:59:467楼 得分:0
    标准 AJAX 调用代码
    JScript code
    function AjaxToPage(Url) { var tempStr = ""; this.Send = function() { var httpRequest; if (typeof XMLHttpRequest != 'undefined') { httpRequest = new XMLHttpRequest(); } else if (typeof ActiveXObject != 'undefined') { httpRequest = new ActiveXObject('Microsoft.XMLHTTP'); } if (httpRequest) { httpRequest.open('GET', Url, false); httpRequest.send(null); if (httpRequest.readyState == 4) { if(httpRequest.status == 200) { tempStr = httpRequest.responseText; } else { tempStr = ""; } } else { tempStr = ""; } } else { tempStr = ""; } } this.SendXML = function() { var httpRequest; if (typeof XMLHttpRequest != 'undefined') { httpRequest = new XMLHttpRequest(); } else if (typeof ActiveXObject != 'undefined') { httpRequest = new ActiveXObject('Microsoft.XMLHTTP'); } if (httpRequest) { httpRequest.open('GET', Url, false); httpRequest.send(null); if (httpRequest.readyState == 4) { if(httpRequest.status == 200) { tempStr = httpRequest.responseXML; } else { tempStr = null; } } else { tempStr = null; } } else { tempStr = null; } } this.GetValue = function() { return tempStr; } /* readyState属性: 0 (未初始化) 对象已建立,但是尚未初始化(尚未调用open方法) 1 (初始化) 对象已建立,尚未调用send方法 2 (发送数据) send方法已调用,但是当前的状态及http头未知 3 (数据传送中) 已接收部分数据,因为响应及http头不全,这时通过responseBody和responseText获取部分数据会出现错误, 4 (完成) 数据接收完毕,此时可以通过通过responseBody和responseText获取完整的回应数据 status属性: 长整形标准http状态码,定义如下: Number Description 100 Continue 101 Switching protocols 200 OK 201 Created 202 Accepted 203 Non-Authoritative Information 204 No Content 205 Reset Content 206 Partial Content 300 Multiple Choices 301 Moved Permanently 302 Found 303 See Other 304 Not Modified 305 Use Proxy 307 Temporary Redirect 400 Bad Request 401 Unauthorized 402 Payment Required 403 Forbidden 404 Not Found 405 Method Not Allowed 406 Not Acceptable 407 Proxy Authentication Required 408 Request Timeout 409 Conflict 410 Gone 411 Length Required 412 Precondition Failed 413 Request Entity Too Large 414 Request-URI Too Long 415 Unsupported Media Type 416 Requested Range Not Suitable 417 Expectation Failed 500 Internal Server Error 501 Not Implemented 502 Bad Gateway 503 Service Unavailable 504 Gateway Timeout 505 HTTP Version Not Supported */ } 待续.....
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-01-15 16:59:598楼 得分:0
    牛人。太长!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • fxxyz
    • 等级:
    发表于:2008-01-15 17:03:339楼 得分:0
    插队..顶
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-01-15 17:05:0410楼 得分:0
    C# code
    这段代码放到Page_Load中 DataSet ds = new DataSet("dataset"); ds.Tables.Add(dt); ds.Tables[0].TableName = "table"; 填充dt数据省略.... Response.Write(ds.GetXml()); Response.Buffer = false; Response.Flush(); Response.End(); Response.Close();
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-01-15 17:07:3411楼 得分:0
    我说明一下代码过长的原因
    1.这事应用在DEV的文本框下的代码
    2.试用了标准的AJAX.
    如果这个功能在标准的TextBox+ajaxpro.2.dll完成的话,大概是上述代码的1/3到1/4.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-01-15 17:07:4512楼 得分:0
    好长····
    仰望····
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • qiangv
    • 等级:
    发表于:2008-01-15 17:09:3513楼 得分:0
    http://topic.csdn.net/u/20080105/12/0e3200e9-f553-4801-ab11-848117ccb6c3.html

    这个是我之前写的。
    你看看是否有帮助。
    除了自己模拟没有别的方法。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-01-15 17:13:1114楼 得分:0
    我的意思也是模拟一下 有现成的吗???完整的 打个包什么的 呵呵 这样学习起来好用一点
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • qiangv
    • 等级:
    发表于:2008-01-15 17:23:2315楼 得分:0
    看了下,你有两个需求。
    一个是获得焦点,自动下拉。
    一个是自动筛选。

    这个试试看微软ajax里面的autocomplete或者别的ajax方案,有的。

    或者你试试nerver-online.net上面的控件。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • cat_hsfz
    • 等级:
    发表于:2008-01-15 23:27:2516楼 得分:10
    那个不是下拉(DropDownList),那个肯定是“自动完成(AutoComplete)”。你用ASP.NET AJAX的AutoComplete好了。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-01-15 23:36:0017楼 得分:10
    以前自己写过一个,不过是一次性用ajax把数据取到内存里,再根据用户输入来过滤显示在下拉框里的。
    这样做主要是考虑用户的输入范围不大,而且如果随时刷新ajax,服务器受不了,显示停滞现象。