JQuery是一种非常强大的客户端JS编程技术,这里不想过多阐述它的相关背景知识,只想简单演示一下如何与asp.net的控件结合开发。
比如,我们要做一个下面如图所示的功能,效果是状态、编号、数字1、数字2、平均值所有的项都是通过后台绑定,如何点击checkbox按钮,来实现自动计算当前行两个数字的平均值呢?前提是用JQuery来实现?
我们直接在页面的Page_Load事件中输入如下代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
protected
void
Page_Load(
object
sender, EventArgs e)
{
if
(!Page.IsPostBack)
{
DataTable dt =
new
DataTable();
dt.Columns.AddRange(
new
DataColumn[] {
new
DataColumn(
"id"
,
typeof
(Int32)),
new
DataColumn(
"num1"
,
typeof
(Int32)),
new
DataColumn(
"num2"
,
typeof
(Int32))
});
DataRow dr =
null
;
dr = dt.NewRow();
dr[
"id"
] = 1;
dr[
"num1"
] = 20;
dr[
"num2"
] = 40;
dt.Rows.Add(dr);
dr = dt.NewRow();
dr[
"id"
] = 2;
dr[
"num1"
] = 40;
dr[
"num2"
] = 30;
dt.Rows.Add(dr);
this
.GridView1.DataSource = dt.DefaultView;
this
.GridView1.DataBind();
}
}
|
前台页面body部分:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
<
body
>
<
form
id
=
"form1"
runat
=
"server"
>
<
div
>
<
asp:GridView
ID
=
"GridView1"
runat
=
"server"
AutoGenerateColumns
=
"false"
>
<
Columns
>
<
asp:TemplateField
HeaderText
=
"状态"
>
<
ItemTemplate
>
<
asp:CheckBox
ID
=
"checkstate"
runat
=
"server"
/>
</
ItemTemplate
>
</
asp:TemplateField
>
<
asp:TemplateField
HeaderText
=
"编号"
>
<
ItemTemplate
>
<
asp:Label
ID
=
"lblId"
runat
=
"server"
> <%#Eval("id") %></
asp:Label
>
</
ItemTemplate
>
</
asp:TemplateField
>
<
asp:TemplateField
HeaderText
=
"数字1"
>
<
ItemTemplate
>
<
asp:Label
ID
=
"lblNum1"
runat
=
"server"
> <%#Eval("num1") %></
asp:Label
>
</
ItemTemplate
>
</
asp:TemplateField
>
<
asp:TemplateField
HeaderText
=
"数字2"
>
<
ItemTemplate
>
<
asp:Label
ID
=
"lblNum2"
runat
=
"server"
> <%#Eval("num2") %></
asp:Label
>
</
ItemTemplate
>
</
asp:TemplateField
>
<
asp:TemplateField
HeaderText
=
"平均值"
>
<
ItemTemplate
>
<
asp:TextBox
ID
=
"avg_value"
runat
=
"server"
/>
</
ItemTemplate
>
</
asp:TemplateField
>
</
Columns
>
</
asp:GridView
>
</
div
>
</
form
>
</
body
>
|
关键的在页面的head部分,输入如下代码就可以实现如图效果了。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
<script src=
"js/jquery-1.4.2.js"
></script>
<script type=
"text/javascript"
>
$(
function
() {
$(
"#<%=GridView1.ClientID%>"
).find(
"tr td input[type=checkbox]"
).each(
function
() {
$(
this
).bind(
"click"
,
function
() {
if
(
this
.checked) {
var
id = $(
this
).parent().parent().find(
"span[id*=lblId]"
).text();
var
num1 = $(
this
).parent().parent().find(
"span[id*=lblNum1]"
).text();
var
num2 = $(
this
).parent().parent().find(
"span[id*=lblNum2]"
).text();
var
result = (parseFloat(num1) + parseFloat(num2)) / 2;
$(
this
).parent().parent().find(
"input[id*=avg_value]"
).val(result);
}
else
{
$(
this
).parent().parent().find(
"input[id*=avg_value]"
).val(
""
);
}
});
});
});
</script>
|
你会发现JQuery的代码读着很轻松,很容易理解。而且代码也很优美,最关键的是兼容性很好。
再附一个简单点的例子,这是一个静态html页面,看JQuery是如何发挥威力的。效果是点击每一行的按钮时,弹出当前行的text里面的value。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
<
html
>
<
head
>
<
script
type
=
"text/javascript"
src
=
"jquery-1.4.2.js"
></
script
>
<
script
type
=
"text/javascript"
>
$(function(){
$("table tr td").each(function(){
$(this).find("[type=button]").click(function(){
alert($(this).parent().parent().find("[type=text]").val());
});
});
});
</
script
>
</
head
>
<
body
>
<
table
>
<
tr
>
<
td
>1</
td
>
<
td
><
input
type
=
text
value
=
"数据1"
/></
td
>
<
td
><
input
type
=
button
value
=
"获取"
/></
td
>
</
tr
>
<
tr
>
<
td
>2</
td
>
<
td
><
input
type
=
text
value
=
"数据2"
/></
td
>
<
td
><
input
type
=
button
value
=
"获取"
/></
td
>
</
tr
>
</
table
>
</
body
>
</
html
>
|
试想,如果我们用js去做,将会很麻烦,而且还要考虑各种浏览器的兼容性。看到这里不得不感叹一句,JQuery虽然短小,但是相当强大啊。
本文转自 guwei4037 51CTO博客,原文链接:http://blog.51cto.com/csharper/1345977