[原创+源码]绝对强悍:jQuery实现可编辑表格的用户管理系统 (二)

来源:互联网 发布:f35知乎 编辑:程序博客网 时间:2024/05/01 19:45

如题,由于帖子长度限制,本文上接
[原创]jQuery+Ajax+Json+Php技术实现可编辑表格的用户管理系统(一)如题,我们给大家做了基础知识的铺垫,下面我们来看下如何实现功能
     首先,我们这里涉及到几个页面,
               1)jquery-post.html是整个页面的核心,用户显示数据和显示表单,可编辑的表格也是基于此页面
               2)jquery-post.php 实现的是向数据库中插入数据的操作页面
               2)jquery-post-member.php 实现的是从数据库中读取数据的操作页面
               3)jquery-update-member.php 实现的是更新数据到数据库中
  以上文件已经打包可下载,下载地址: 20110330-31jQuery.rar (4.24 KB, 下载次数: 0)
   
    分析如下:
      jquery-post.html

Code:
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
  2. <html xmlns="http://www.w3.org/1999/xhtml">  
  3. <head>  
  4. <style>  
  5. #div1 {  
  6.     background-color:#6F3;  
  7.     border:#00F solid 1px;  
  8.     width:400px;  
  9.     height:200px;  
  10.     left:50%;  
  11.     top:50%;  
  12.     position:absolute;  
  13.     display:none;  
  14. }  
  15. #div0 {  
  16.     background-color:#FF9;  
  17.     border:#00F solid 1px;  
  18.     width:300px;  
  19.     height:100px;  
  20.     position:absolute;  
  21.     display:none;  
  22.     overflow:auto;  
  23. }  
  24. #tab1{  
  25.     width:500px;  
  26.     text-align:center;  
  27.     border:#999 1px solid;  
  28.     border-collapse:collapse;  
  29.     }  
  30. #tab1 td{  
  31.     border:#999 1px solid;}  
  32. #tab1 th{  
  33.     border:#999 1px solid;}  
  34. .one{  
  35.     background-color:#FC9;}  
  36. .two{  
  37.     background-color:#CF6;}  
  38. .over{  
  39.     background-color:#F93;}  
  40. </style>  
  41. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
  42. <title>无标题文档</title>  
  43. <script type="text/javascript" src="../include/jquery-1.5.1.min.js"></script>  
  44. <script type="text/javascript">  
  45.   
  46.   $(function(){  
  47.       //处理用户单击事件  
  48.       $("#btn1").click(function(){  
  49.             
  50.           $.post("./jquery-post.php",  
  51.           $("#form1").serialize(),  
  52.            function(responseText,textStatus){  
  53.               if(responseText){  
  54.    //获得居中位置   
  55.    var le=($(window).width() - $('#div').outerWidth())/2;  
  56.    var tp=($(window).height() - $('#div').outerHeight())/2;  
  57.            
  58.         //重新设定层的位置   
  59.     $("#div1").css({"left":le,"top":tp});  
  60.      //设置层的效果  
  61.      $("#div1").show('slow');  
  62. /*重新加载一次数据,从数据库中读取出最新的数据*/     
  63.     getMember();   
  64.                   
  65. /* 
  66. 当鼠标点击层的时候,我们隐藏当前层 
  67. */  
  68. $("#div1").click(function(){  
  69.      //隐藏提示信息的div  
  70.      $("#div1").hide('slow');  
  71.   });  
  72.                   
  73.       
  74.                   
  75.                   }  
  76.                     
  77.               });  
  78.           
  79.           });  
  80.     
  81.   
  82.  /*网页加载完毕时应该加载数据,这里,我们调用一下getMemger()*/  
  83.    getMember();  
  84.   
  85.       
  86.       
  87. });  
  88.   
  89. /* 
  90. 获得所有的用户信息,触发ajax请求 
  91. */  
  92. function getMember(){  
  93.       
  94. /*网页加载完毕时应该加载数据*/     
  95. $.post("./jquery-post-member.php",  
  96. function(responseText,textStatus){  
  97.    //调用显示数据的函数  
  98.      DispTable(responseText);  
  99.    });  
  100. }  
  101.   
  102. function DispTable(restr){  
  103.     $('#tab1 tr:not(:first)').remove();  
  104.     //获取服务器端传递的数据  
  105.     var oo=eval("("+restr+")");  
  106.     for(i=0;i<oo.length;i++){  
  107.       //定义行元素  
  108.        var tr=$("<tr></tr>")  
  109.       //得到每个字段的值,并且生成一些td  
  110.        var td=$("<td>"+oo[i].id+"</td> <td id='uname'>"+oo[i].uname+"</td> <td id='upass'>"+oo[i].upass+"</td> <td id='sex'>"+oo[i].sex+"</td> <td id='from1'>"+oo[i].from1+"</td>");  
  111.          
  112.        //将列直接添加到tr中  
  113.         td.appendTo(tr);  
  114.        //把所有的行追加到table中  
  115.         tr.appendTo($("#tab1"));  
  116.       }  
  117.       
  118.       
  119. /*表格隔行变色效果*/  
  120. $("#tab1 tr:even").addClass("one");  
  121. $("#tab1 tr:odd").addClass("two");  
  122. $("#tab1 tr").mousemove(function(){  
  123.     $(this).addClass("over");  
  124.     });  
  125. $("#tab1 tr").mouseout(function(){  
  126.     $(this).removeClass("over");  
  127.     });  
  128.       
  129. /* 
  130. 处理鼠标点击事件,当鼠标点击td的时候变成文本框 
  131. */        
  132. $("#tab1 td").dblclick(function(){  
  133.       
  134.       
  135.     //创建一个单行文本框  
  136.     var inputObj=$("<input type='text'>");  
  137.     //获取当前td对象  
  138.     var tdObj=$(this);  
  139.     //获取当前td文本内容  
  140.     var tdText=tdObj.html();  
  141.       
  142.     //处理当td中已经存在input文本框后,点击没有反应  
  143.       
  144.     if(tdObj.children("input").length>0){  
  145.           
  146.         return false;  
  147.           
  148.     }  
  149.       
  150.     //设置当前文本框的内容  
  151.     inputObj.val(tdText);  
  152.     //清空td的内容  
  153.     tdObj.html("");  
  154.     //设置文本框的边框为0  
  155.     inputObj.css("border-width","0");  
  156.     //设置文本框的宽度和高度  
  157.       
  158.     inputObj.width(tdObj.width());  
  159.     inputObj.height(tdObj.height());  
  160.       
  161.     //设置文本框的文字大小  
  162.     inputObj.css("font-size","16px");  
  163.     //设置文本框的背景颜色  
  164.     inputObj.css("background-color",tdObj.css("background-color"));  
  165.       
  166.     //当点击后,向td中添加一个文本框  
  167.     inputObj.appendTo(tdObj);  
  168.       
  169.     //点击文本框后选中文本框的值,并且获得焦点  
  170.       
  171.     inputObj.trigger("focus").trigger("select");  
  172.       
  173.     //点击文本框后取消广播事件  
  174.     inputObj.click(function(){  
  175.         return false;  
  176.     });  
  177.       
  178.     inputObj.keyup(function(e){  
  179.        //获取用户按下的键盘值  
  180.        var keycode=e.which;  
  181.        if(keycode==13){  
  182.              
  183.            //设置td的内容为新输入的内容  
  184.            tdObj.html(inputObj.val());  
  185.              
  186.              
  187.            //将数据更新到数据库中  
  188.            /* 
  189.            1)如何获取更新的条件,一般我们是根据id更新,但是如何获取id? 
  190.            2)如何获取到要更新的字段? 
  191.            3)如何获取到要更新的内容(值) 
  192.            */  
  193.              
  194.            if(confirm("您确定要更新到数据吗?")){  
  195.            //获取第一个td的文本,也就是id  
  196.            var sno=tdObj.parent("tr").children("td").eq(0).text();  
  197.              
  198.            //获取要更新的字段  
  199.            var op=tdObj.attr("id");  
  200.              
  201.            //获取当前文本框的值  
  202.            var value=$(this).val();  
  203.              
  204.            //alert("id:"+sno+",op:"+op+",val:"+value);  
  205.              
  206.            //根据参数立即更新数据  
  207.            UpdateTable(sno,op,value);  
  208.              
  209.            }else{  
  210.                  
  211.                }  
  212.              
  213.         }  
  214.         //判断用户是否按下了esc键,如果按下则返回修改前得数据  
  215.        if(keycode==27){  
  216.              
  217.            //设置td的内容为未修改前的内容  
  218.            tdObj.html(tdText);  
  219.          }  
  220.           
  221.     });  
  222.       
  223.       
  224.       
  225.       
  226.       
  227.   });  
  228.   
  229.       
  230.       
  231. /*添加td上浮动层的效果*/           
  232.       
  233.     $("#tab1 td").mousemove(function(e){  
  234.           
  235.         //设置详细浮动层的位置  
  236.         $("#div0").css({left:e.pageX+10,top:e.pageY+10});  
  237.         //设置详细信息层的内容  
  238.         $("#div0").html("<b>详细信息:</b>    单击隐藏<hr>"+$(this).html());  
  239.         //详细显示浮动层  
  240.         $("#div0").show('slow');  
  241.       
  242.     });  
  243. /* 
  244. 给浮动层添加一个单击事件 
  245. */    
  246.     $("#div0").click(function(){  
  247.         //清空当前div的内容  
  248.         $(this).html("");  
  249.         //单击后缓慢隐藏效果  
  250.         $(this).hide("slow");  
  251.         });  
  252.       
  253.  }  
  254.    
  255.  /* 
  256.  更新最新数据到数据中 
  257.  建立ajax请求 
  258.  */  
  259.  function UpdateTable(sno,opt,val){  
  260.       
  261.  //建立ajax请求,将数据更新到数据库中     
  262.  $.post("./jquery-update-table.php",{id:sno,option:opt,value:val},function(responseText,textStatus){  
  263.        
  264.       if(responseText){  
  265.           alert("更新数据成功!");  
  266.         }else{  
  267.               
  268.           alert("更新数据失败!");   
  269.             }  
  270.        
  271.      });  
  272.        
  273.  }  
  274.    
  275. </script>  
  276. </head>  
  277.   
  278. <body>  
  279. <div id="div0"></div>  
  280. <div id="div1">插入成功</div>  
  281. <h3>jQuery+Ajax+Json+Php技术实现可编辑表格的用户管理系统</h3><br>  
  282. <form name="form1" id="form1" action="">  
  283.   用户名:  
  284.     <input type="text" name="uname" />  
  285.   <br />  
  286.   密 码:  
  287.   <input type="text" name="upass" />  
  288.   <br>  
  289.   性 别:  
  290.   <input name="sex" type="radio" value="男" />  
  291.   男  
  292.   <input name="sex" type="radio" value="女" />  
  293.   女<br />  
  294. 籍 贯:  
  295. <input type="text" name="from1" />  
  296.   <br>  
  297.   <input type="button" id="btn1" value="添加" />  
  298. </form>  
  299. <hr>  
  300. <div id="div2">  
  301.   <table id="tab1" border="1">  
  302.     <tr>  
  303.       <th height="42" width="10%">编号</th>  
  304.       <th width="30%">姓名</th>  
  305.       <th width="30%">密码</th>  
  306.       <th width="20%">性别</th>  
  307.       <th width="10%">籍贯</th>  
  308.     </tr>  
  309.   </table>  
  310. </div>  
  311. </body>  
  312. </html>  


      在这个页面我们做了很多工作,包括添加用户信息的表单,从数据库中读取要显示的数据、鼠标跟随的层....总之这个页面时核心,每一步我都有详细的注释,应该能看清楚。

jquery-post.php

Code:
  1. <?php  
  2.   mysql_connect("localhost","root","123");  
  3.   mysql_select_db("test");  
  4.   mysql_query("set names utf8");  
  5.   //定义sql语句  
  6.   $sql="insert into member values(null,'{$_POST['uname']}','{$_POST['upass']}','{$_POST['sex']}','{$_POST['from1']}')";  
  7.   //执行插入操作,并返回执行结果  
  8.   $rs=mysql_query($sql);  
  9.   echo $rs;  
  10.     
  11.  ?>  

这个页面主要是定义sql语句,并且插入到数据库中,学过php的应该不用解释了吧

jquery-post-member.php

Code:
  1. <?php  
  2. //header("Content-Type:application/json;charset=UTF-8");  
  3.   mysql_connect("localhost","root","123");  
  4.   mysql_select_db("test");  
  5.   mysql_query("set names utf8");  
  6.   //查询所有的数据,并倒序  
  7.   $sql="select * from member order by id desc";  
  8.   //执行查询  
  9.   $rs=mysql_query($sql);  
  10.     
  11.   //封装json格式的数组  [{name:"zhangsan",sex:"男"},{},{}]  
  12.   while($rows=mysql_fetch_assoc($rs)){  
  13.        //将当前的查询结果放到$arr中  
  14.        $arr[]=$rows;  
  15.         
  16.       }  
  17.   //将数组转换为json字符串  
  18.   echo json_encode($arr);    
  19.  ?>  

此页面用户查询数据,并且显示出来,并进行输出,输出成json对象格式,这一步是我们客户端页面解析json的基础
jquery-update-table.php

Code:
  1. <?php  
  2.   mysql_connect("localhost","root","123");  
  3.   mysql_select_db("test");  
  4.   mysql_query("set names utf8");  
  5.     
  6.   $sql="update member set {$_POST['option']}='{$_POST['value']}' where id={$_POST['id']}";  
  7.   //执行sql语句  
  8.   $rs=mysql_query($sql);  
  9.   //返回更新的行数  
  10.   echo $rs;  
  11.  ?>  
 

可编辑表格中,当用户按下回车键后 执行更新操作,将要更新的数据库更新到数据库中

  源码下载:   20110330-31jQuery.rar 

 [原创地址]    [源码下载]    [更多原创,多多支持多]

推荐:
[源码] PHP+MySQL+jQuery实现随意拖动层并即时保存拖动位置