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虽然短小,但是相当强大啊。