你型我塑博客
snryang
博客园
::
首页
::
新随笔
::
联系
::
订阅
::
管理
::
24 随笔 :: 8 文章 :: 29 评论 :: 0 引用
基于jqury的自动完成
实现了上下键对滚动条的控制,并固定了首行
主要js文件 snryang.js
//
JScript 文件
var
DH_Title
=
null
;
//
对象数组,对象有三个属性,Field对应数据库字段名 Name表格标题行显示的中文名 IsShow是否显示
var
DH_Control
=
null
;
//
input控件
var
DH_PostObj
=
null
;
//
传到后台的参数
var
DH_KeyStr
=
null
;
//
按键值
var
DH_CallBack
=
null
;
//
回调函数,返回选择的对象
var
DH_SendPage
=
"
AjaxMethod.aspx
"
;
//
后台页面
var
DH_LoadStr
=
"
数据加载中
"
;
//
数据载入时显示的html代码
var
DH_Height
=
300
;
//
div高度
var
DH_Date
=
null
;
//
post返回的数据
var
DH_Index
=
-
1
;
//
当前索引
var
DH_MaxIndex
=
null
;
//
最大索引
var
DH_Div
=
null
;
//
div层
var
DH_DivTr
=
null
;
//
层里表格下的所有行
function
DH_Show()
{
if
(DH_KeyStr
!=
38
&&
DH_KeyStr
!=
40
&&
DH_KeyStr
!=
13
&&
DH_KeyStr
!=
null
)
{
if
($(
"
#hide_div
"
).length
<
1
)
//
层不存在则插入
$(
"
body
"
).append(
"
<div style=\
"
position:absolute;height:
"
+ DH_Height +
"
px;overflow
-
y:auto;border:solid 2px #95B7F3;\
"
id=\
"
hide_div\
"
></div>
"
);
DH_Div
=
$(
"
#hide_div
"
);
DH_Div.empty();
if
(DH_PostObj
!=
null
&&
DH_Control
!=
null
)
{
DH_Div.css(
"
top
"
, getAbsoluteTop(DH_Control)
+
DH_Control.offsetHeight
+
2
);
//
设置层的top left属性
DH_Div.css(
"
left
"
, getAbsoluteLeft(DH_Control) );
DH_Div.html(DH_LoadStr);
//
填入数据载入时显示的html
$.post(DH_SendPage ,DH_PostObj ,
function
(m)
{
eval(m);
DH_Date
=
renObj;
DH_Div.html(JsonToTable());
DH_Div.css(
"
display
"
,
"
block
"
);
DH_DivTr
=
DH_Div.find(
"
tr
"
);
DH_MaxIndex
=
DH_DivTr.length
-
1
;
if
(DH_MaxIndex
>
0
)
{
DH_Index
=
1
;
DH_DivTr.get(
1
).style.backgroundColor
=
"
#95B7F3
"
;
}
else
{
DH_Div.css(
"
display
"
,
"
none
"
);
}
}
);
}
else
{
DH_Div.css(
"
display
"
,
"
none
"
);
}
}
else
{
if
(DH_Index
==
-
1
)
return
;
if
(DH_Div.css(
"
display
"
)
==
"
block
"
)
{
if
(DH_KeyStr
==
13
)
//
回车
{
if
(DH_CallBack
!=
null
)
DH_CallBack(DH_Date[DH_Index
-
1
]);
DH_Div.css(
"
display
"
,
"
none
"
);
DH_Index
=
-
1
;
}
else
{
if
(DH_Index
==
-
1
)
return
DH_DivTr.get(DH_Index).style.backgroundColor
=
""
;
//
按下键盘向下方向键
if
(DH_KeyStr
==
40
)
{
DH_Index
++
;
}
//
按下键盘的向上方向键
else
if
(DH_KeyStr
==
38
)
{
DH_Index
--
;
}
if
(DH_Index
==
0
)
DH_Index
=
DH_MaxIndex ;
if
(DH_Index
>
DH_MaxIndex)
DH_Index
=
1
;
DH_DivTr.get(DH_Index).style.backgroundColor
=
"
#95B7F3
"
;
//
控制滚动条
var
div
=
DH_Div.get(
0
);
var
tr
=
DH_DivTr.get(DH_Index);
var
scrollAreaMin
=
div.scrollTop;
var
scrollAreaMax
=
div.scrollTop
+
div.offsetHeight;
if
(tr.offsetTop
<
scrollAreaMin )
div.scrollTop
=
tr.offsetTop;
if
(tr.offsetTop
+
tr.offsetHeight
>
scrollAreaMax)
div.scrollTop
=
tr.offsetTop
+
tr.offsetHeight
-
div.offsetHeight;
}
}
}
}
//
将返回的数据转换成table
function
JsonToTable()
{
var
str
=
"
<table>
"
str
+=
"
<tr>
"
;
var
temp
=
new
Array();
for
(
var
i
=
0
;i
<
DH_Title.length ; i
++
)
{
if
( DH_Title[i].IsShow
==
1
)
{
str
+=
"
<td>
"
+
DH_Title[i].Name
+
"
</td>
"
;
temp.push(DH_Title[i].Field);
}
}
str
+=
"
</tr>
"
;
for
(
var
i
=
0
;i
<
DH_Date.length ; i
++
)
{
str
+=
"
<tr onclick=\
"
DH_click(
"
+ (i + 1) +
"
)\
"
ondblclick=\
"
DH_dbclick(
"
+ i +
"
)\
"
>
"
;
for
(
var
j
=
0
;j
<
temp.length ; j
++
)
{
str
+=
"
<td>
"
+
DH_Date[i][temp[j]]
+
"
</td>
"
;
}
str
+=
"
</tr>
"
}
str
+=
"
</table>
"
;
return
str;
}
//
行单击
function
DH_click(i)
{
DH_DivTr.css(
{
"
background-color
"
:
""
}
);
DH_DivTr.get(i).style.backgroundColor
=
"
#95B7F3
"
;
DH_Index
=
i;
}
//
半双击
function
DH_dbclick(i)
{
DH_Div.css(
"
display
"
,
"
none
"
);
DH_CallBack(DH_Date[i]);
DH_Index
=
-
1
;
}
//
get absolute Left position
//
建立者:jiarry@hotmail.com
//
返回对象位于窗口的绝对左边距离
function
getAbsoluteLeft( ob )
{
if
(
!
ob)
{
return
null
;}
var
obj
=
ob;
var
objLeft
=
obj .offsetLeft;
while
( obj
!=
null
&&
obj .offsetParent
!=
null
&&
obj .offsetParent.tagName
!=
"
BODY
"
)
{
objLeft
+=
obj .offsetParent.offsetLeft;
obj
=
obj .offsetParent;
}
return
objLeft ;
}
//
get absolute TOP position
//
建立者:jiarry@hotmail.com
//
返回对象位于窗口的绝对上边距离
function
getAbsoluteTop( ob )
{
if
(
!
ob)
{
return
null
;}
var
obj
=
ob;
var
objTop
=
obj .offsetTop;
while
( obj
!=
null
&&
obj .offsetParent
!=
null
&&
obj .offsetParent.tagName
!=
"
BODY
"
)
{
objTop
+=
obj .offsetParent.offsetTop;
obj
=
obj .offsetParent;
}
return
objTop ;
}
前台调用页面 default.aspx
<%
@ Page Language
=
"
C#
"
AutoEventWireup
=
"
true
"
CodeFile
=
"
Default.aspx.cs
"
Inherits
=
"
_Default
"
%>
<!
DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
>
<
html
xmlns
="http://www.w3.org/1999/xhtml"
>
<
head
runat
="server"
>
<
title
>
无标题页
</
title
>
<
script
type
="text/javascript"
src
="jquery.js"
></
script
>
<
script
type
="text/javascript"
src
="Snryang.js"
></
script
>
<
script
type
="text/javascript"
>
function
test(event,control)
{
DH_Title
=
[
{Field:
"
SupplierID
"
,Name:
"
SupplierID
"
,IsShow:
0
}
,
{Field:
"
CompanyName
"
,Name:
"
CompanyName
"
,IsShow:
1
}
,
{Field:
"
ContactName
"
,Name:
"
ContactName
"
,IsShow:
1
}
,
{Field:
"
ContactTitle
"
,Name:
"
ContactTitle
"
,IsShow:
1
}
,
{Field:
"
Address
"
,Name:
"
Address
"
,IsShow:
1
}
];
DH_Control
=
control;
DH_PostObj
=
{Value:control.value}
;
DH_KeyStr
=
event.keyCode;
DH_CallBack
=
function
(ren)
{
control.value
=
ren.CompanyName;
}
DH_Show();
}
</
script
>
</
head
>
<
body
>
<
form
id
="form1"
runat
="server"
>
<
div
>
<
a
style
="color:#FF0000;"
></
a
>
</
div
>
<
div
style
="width: 393px; height: 100px;position:absolute; left: 224px; top: 119px;"
>
<
asp:TextBox
ID
="TextBox1"
runat
="server"
onkeyup
="test(event,this)"
></
asp:TextBox
>