分享

AJAX异步更改数据库

 昵称10504424 2013-03-13

前段时间做了一个小网站,里面有个小功能感觉挺好的,在此与大家分享一下,还请各位大神不要笑话小弟的无知大笑


此功能大概是这个样子的:点击下图中的类别名称,就可以对类别进行修改。




点击类别名称以后,原来的表格变成一个可编辑的文本框,并全选里面的内容,此时可直接进行修改。回车或者鼠标点击其他地方,提交修改内容.




如果不做修改点击别处或者按“Esc”或回车键,就会回到之前的样子,如果修改后跟其他类名重复就会有相应的提示:




如果类名没问题就会将修改后的内容显示到页面,同时会修改数据库的值。




数据库修改前              数据库修改后

用到的js代码

  1. <SPAN style="FONT-FAMILY: 'Microsoft YaHei'; FONT-SIZE: 16px">/********************************************** 
  2. 创建人:刘水镜 
  3. 说明:    可编辑的表格 
  4. **********************************************/  
  5.   
  6. $(function () {    // 相当于在页面中的body标签加上onload事件   
  7.     $(".caname").click(function () {   // 给页面中有caname类的标签加上click函数   
  8.         var objTD = $(this);  
  9.         var oldText = $.trim(objTD.text());  // 保存老的类别名称   
  10.         var input = $("<input type='text' value='" + oldText + "' />"); // 文本框的HTML代码   
  11.         objTD.html(input);   // 当前td的内容变为文本框   
  12.         // 设置文本框的点击事件失效   
  13.         input.click(function () {  
  14.             return false;  
  15.         });  
  16.         // 设置文本框的样式   
  17.         input.css("border-width""0px");  //边框为0   
  18.         input.height(objTD.height());   //文本框的高度为当前td单元格的高度   
  19.         input.width(objTD.width());    // 宽度为当前td单元格的宽度   
  20.         input.css("font-size""16px");    // 文本框的内容文字大小为16px   
  21.         input.css("text-align""center");   // 文本居中   
  22.         input.trigger("focus").trigger("select");   // 全选   
  23.   
  24.         // 文本框失去焦点时重新变为文本   
  25.         input.blur(function () {  
  26.             var newText = $(this).val(); // 修改后的名称   
  27.             var input_blur = $(this);  
  28.   
  29.             // 当老的类别名称与修改后的名称不同的时候才进行数据的提交操作   
  30.             if (oldText != newText) {  
  31.                 // 获取该类别名所对应的ID(序号)   
  32.                 var caid = $.trim(objTD.prev().text());  
  33.                 // AJAX异步更改数据库   
  34.                 var url = "../handler/ChangeCaName.ashx?caname=" + encodeURI(encodeURI(newText)) + "&caid=" + caid + "&t=" + new Date().getTime();  
  35.                 $.get(url, function (data) {  
  36.                     if (data == "false") {  
  37.                         alert("类别修改失败,请检查是否类别名称重复!");  
  38.                         input_blur.trigger("focus").trigger("select");   // 文本框全选   
  39.                     } else {  
  40.                         $("#test").text("");  
  41.                         objTD.html(newText);  
  42.                     }  
  43.                 });  
  44.             } else {  
  45.                 // 前后文本一致,把文本框变成标签   
  46.                 objTD.html(newText);  
  47.             }  
  48.         });  
  49.   
  50.         // 在文本框中按下键盘某键   
  51.         input.keydown(function (event) {  
  52.             var jianzhi = event.keyCode;  
  53.             var input_keydown = $(this);  
  54.   
  55.             switch (jianzhi) {  
  56.                 case 13: // 按下回车键 ,把修改后的值提交到数据库   
  57.                     // $("#test").text("您按下的键值是: " + jianzhi);   
  58.                     var newText = input_keydown.val(); // 修改后的名称   
  59.                     // 当老的类别名称与修改后的名称不同的时候才进行数据的提交操作   
  60.                     if (oldText != newText) {  
  61.                         // 获取该类别名所对应的ID(序号)   
  62.                         var caid = $.trim(objTD.prev().text());  
  63.                         // AJAX异步更改数据库   
  64.                         var url = "../handler/ChangeCaName.ashx?caname=" + encodeURI(encodeURI(newText)) + "&caid=" + caid + "&t=" + new Date().getTime();  
  65.                         $.get(url, function (data) {  
  66.                             if (data == "false") {                                 
  67.                                 alert("类别修改失败,请检查是否类别名称重复!");  
  68.                                 input_keydown.trigger("focus").trigger("select");   // 文本框全选   
  69.                             } else {  
  70.                                 $("#test").text("");  
  71.                                 objTD.html(newText);  
  72.                             }  
  73.                         });  
  74.                     } else {  
  75.                         // 前后文本一致,把文本框变成标签   
  76.                         objTD.html(newText);  
  77.                     }  
  78.                     break;  
  79.                 case 27: // 按下Esc键, 取消修改,把文本框变成标签   
  80.                     $("#test").text("");  
  81.                     objTD.html(oldText);  
  82.                     break;  
  83.             }  
  84.         });  
  85.   
  86.     });  
  87. });  
  88.   
  89.   
  90. // 屏蔽Enter按键   
  91. $(document).keydown(function (event) {  
  92.     switch (event.keyCode) {  
  93.         case 13: return false;  
  94.     }  
  95. });   
  96. </SPAN>  


一般处理程序代码

  1. <SPAN style="FONT-FAMILY: 'Microsoft YaHei'; FONT-SIZE: 16px">using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Web;  
  5. using Model;  
  6. using BLL;  
  7. namespace Web.handler  
  8. {  
  9.     /// <summary>   
  10.     /// ChangeCaName 的摘要说明   
  11.     /// </summary>   
  12.     public class ChangeCaName : IHttpHandler  
  13.     {  
  14.         public void ProcessRequest(HttpContext context)  
  15.         {  
  16.             context.Response.ContentType = "text/plain";  
  17.             string caid = context.Request.QueryString["caid"];  
  18.             string caname =context.Server.UrlDecode (context.Request.QueryString["caname"]);  
  19.             Category ca = new Category(caid, caname);  
  20.               
  21.             //判断是否已有该类别名   
  22.             CategoryManger camgr = new CategoryManger();  
  23.             if (camgr.IsExist(caname))  
  24.             {  
  25.                 //存在   
  26.                 context.Response.Write("false");  
  27.                 return;  
  28.             }  
  29.   
  30.             //更改数据库类别名   
  31.             bool b=camgr.Update( ca);  
  32.             if (b)  
  33.             {  
  34.                 context.Response.Write("true");  
  35.             }  
  36.             else  
  37.             {  
  38.                 context.Response.Write("false");  
  39.             }  
  40.         }  
  41.   
  42.         public bool IsReusable  
  43.         {  
  44.             get  
  45.             {  
  46.                 return false;  
  47.             }  
  48.         }  
  49.     }  
  50. }</SPAN>  

功能很简单,但用起来却非常的方便,个人觉得很好,请各位大神不要笑话在下的才疏学浅


另外实现此效果需要用到JQuery的函数,在此附上JQuery的下载,有需要的朋友拿去。

jQuery源文件

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多