各位大侠:我知道table有个row属性,可以用Javascript控制显示的行。
但是怎么控制DIV的li内容。其实就是类似google/百度suggest的功能中,当提示suggest关键字的时候,它们都可以通过方向键控制suggest的内容。我自己简单的实现了suggest显示功能,现在要做 通过方向键控制suggest的DIV内容显示比如:<div id='key'><ul>
<li>fashion1</a></li>
<li>fashion2</a></li>
<li>fashion3</a></li>
<li>fashion4</a></li>
<li>fashion5</a></li>
<li>fashion6</a></li>
<li>fashion7</a></li>
<li>fashion8</a></li>
<li>fashion9</a></li>
<li>fashion10</a></li>
<ul></div>我怎么用javascript获取到div并通过键盘的上下方向键来控制显示li的内容~~在线等····急急急····
但是怎么控制DIV的li内容。其实就是类似google/百度suggest的功能中,当提示suggest关键字的时候,它们都可以通过方向键控制suggest的内容。我自己简单的实现了suggest显示功能,现在要做 通过方向键控制suggest的DIV内容显示比如:<div id='key'><ul>
<li>fashion1</a></li>
<li>fashion2</a></li>
<li>fashion3</a></li>
<li>fashion4</a></li>
<li>fashion5</a></li>
<li>fashion6</a></li>
<li>fashion7</a></li>
<li>fashion8</a></li>
<li>fashion9</a></li>
<li>fashion10</a></li>
<ul></div>我怎么用javascript获取到div并通过键盘的上下方向键来控制显示li的内容~~在线等····急急急····
<head runat="server">
<title>自动完成</title>
<style type="text/css">
#dSuggest {
z-index:0;
position:absolute;
background-color:#ffffff;
}
#sug {
list-style:none;
border:solid 1px #09f;
margin-left:0;
margin-top:0;
width:300px;
padding-left:0;/*添加此项,修改在FF中的样式*/
}
#sug li {
width:100%;
padding-left:2px;
margin-left:2px;
}
#sug span {
position:absolute;
z-index:200;
right:3px;
}
.select {
background-color:#09f;
color:#ffffff;
cursor:default;
}
</style>
<script type="text/javascript">
var XMLHttp=false;
var j=-1;
function CreateXMLHttpRequest() {
if(window.ActiveXObject)
{
XMLHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
else if(window.XMLHttpRequest)
{
XMLHttp = new XMLHttpRequest();
}
if(!XMLHttp && typeof XMLHttpRequest != 'undefined') {
XMLHttp = new XMLHttpRequest();
}
}
function GetSuggest(keyword,e) {
var keyc=GetKeyCode(e);
if(keyc==40 || keyc==38 || keyc==13)
return;
var _url="Search.ashx?keyword="+escape(keyword);
CreateXMLHttpRequest();
XMLHttp.onreadystatechange=function(){
if(XMLHttp.readyState==4) {
if(XMLHttp.status==200) {
$("dSuggest").innerHTML=XMLHttp.responseText;
j=-1;
}
}
}
XMLHttp.open("get",_url,true);
XMLHttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
XMLHttp.send(null);
}
function set_style(num) {//设置样式
for(var i=0;i<$$().length;i++) {
if(i>=0 && i<$$().length&&i==num) {
$$()[i].className="select";
}
else
{
$$()[i].className="";
}
}
}
function mo(nodevalue) {
j=nodevalue;
set_style(j);
}
function form_submit() {
var lis=$$();
if(lis==null)
return;
for(var i=0;i<lis.length;i++) {
if(lis[i].className=="select") {
var key=lis[i].innerHTML.substring(0,lis[i].innerHTML.toUpperCase().indexOf("<SPAN>"));
$('txtKeyword').value=key;
$("dSuggest").innerHTML="";
}
}
}
function updown(e) {
var keyc=GetKeyCode(e);
if(keyc==40 || keyc==38) {
if($$()==null)
return;
if(keyc==40) {
j++;
if(j>=$$().length)
{
j=0;
}
} else if(keyc==38) {
j--;
if(j==-1)
j=$$().length-1;
}
set_style(j);
}
}
function GetKeyCode(e) {//取得不同浏览器下的键盘事件值
var keyc;
if(window.event) {//ie键盘事件
keyc=e.keyCode;
} else if (e.which) {//火狐
keyc=e.which;
}
return keyc;
}
function $(id) {
return document.getElementById(id);
}
function $$() {
var ul=$("sug");
if(ul==null)
return null;
return ul.getElementsByTagName("li");
}
//getPos(this,'Left'),getPos(this,'Top')+this.offsetHeight
function getPos(el,sProp) {
var iPos = 0;
while (el!=null) {
iPos+=el["offset" + sProp];
el = el.offsetParent;
}
return iPos;
}
function setPosition(obj) {
$('dSuggest').style.left=getPos(obj,'Left');
$('dSuggest').style.top=getPos(obj,'Top')+obj.offsetHeight
}
</script>
<style type="text/css">
</style>
</head>
<body onload="setPosition($('txtKeyword'))">
<form id="form1" runat="server" onkeypress="if(GetKeyCode(event)==13){return false;}">
<div>
<input type="text" onkeydown="if(GetKeyCode(event)==13)form_submit()" onkeyup="GetSuggest(this.value,event);updown(event)" autocomplete="off" id="txtKeyword" />
<div id="dSuggest"></div>
<asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />
</div>
</form>
</body>
</html>Search.ashx页面代码
<%@ WebHandler Language="C#" Class="Search" %>using System;
using System.Web;using System.Data.SqlClient;public class Search : IHttpHandler {
public void ProcessRequest (HttpContext context) {
context.Response.ContentType = "text/plain";
string sKeyword = context.Request["keyword"];
if (string.IsNullOrEmpty(sKeyword))
{
context.Response.End();
}
SqlConnection conn = new SqlConnection("Server=(local);Integrated Security=true;DataBase=Northwind");
SqlCommand cmd = new SqlCommand("select top 10 ProductName,QuantityPerUnit from Products where ProductName like '" + sKeyword + "%';", conn);
conn.Open();
SqlDataReader dr = cmd.ExecuteReader();
if (dr.HasRows)
{
context.Response.Write("<ul id='sug'>");
int i = 0;
while (dr.Read())
{
context.Response.Write(string.Format("<li value='{0}' onclick=\"form_submit()\" onmouseover=\"mo(this.value)\">{1}<SPAN>{2}</SPAN></li>", i, dr["ProductName"], dr["QuantityPerUnit"]));
i++;
}
context.Response.Write("</ul>");
} conn.Close();
dr.Close();
cmd.Dispose();
}
public bool IsReusable {
get {
return false;
}
}}
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>SimulateUpDownKeySelect.html</title>
</head> <body>
<h3 style="color: red;">可兼容 IE 和 FireFox 浏览器!</h3>
<input type="text" id="txtInput"/>
<div id="divSelect">
<li>123</li>
<li>456</li>
<li>abc</li>
<li>def</li>
<li>zzz</li>
</div>
</body>
<script type="text/javascript">
<!--
function $(sId)
{
return document.getElementById(sId);
}function clearSelectedOptBgColor(target)
{
if (target.seletedIndex >= 0)
target.options[target.seletedIndex].style.backgroundColor = "";
}
function setSelectedOptBgColor(target)
{
target.options[target.seletedIndex].style.backgroundColor = "yellow";
}var upKeyCode = 38;
var downKeyCode = 40;
var enterKeyCode = 13;var oInput = $("txtInput");
oInput.options = $("divSelect").getElementsByTagName("li");
oInput.seletedIndex = -1;oInput.focus();
oInput.onkeyup = function(event){
if (event == undefined)
event = window.event; switch (event.keyCode)
{
case upKeyCode:
clearSelectedOptBgColor(this);
this.seletedIndex--;
if (this.seletedIndex < 0)
this.seletedIndex = this.options.length - 1;
setSelectedOptBgColor(this);
break; case downKeyCode:
clearSelectedOptBgColor(this);
this.seletedIndex++;
if (this.seletedIndex >= this.options.length)
this.seletedIndex = 0;
setSelectedOptBgColor(this);
break; case enterKeyCode:
this.value = this.options[this.seletedIndex].innerHTML;
break;
}
};
oInput.onblur = function(){
clearSelectedOptBgColor(this);
this.seletedIndex = -1;
};
//-->
</script>
</html>
呵呵,昨天开会去了,早上才看见··用了一下··哈··不错哦··不过有几个小缺憾··1、比如我输入关键词:a;然后会列出一些suggest,等我关闭suggest后,点击text上的a,就不再suggest了,要重输才会suggest2、当列出suggest时,我上下键可以控制suggest选项,但是当我点击了其他空白处后,上下键就失去效果了。原因是失去焦点了,其实点击其他空白处,suggest应该消失。然后针对问题一,我再点击text时候,应该suggest又出现,而不用重新输入··我加了代码,页面onclick事件,原理上应该没错,结果没反应··//鼠标点击其他地方清空提示层
function setNullClick()
{
$("dSuggest").innerHTML=""; //清空提示层
$('dSuggest').style.display = "none"; //设置提示层不可见
}