前段时间做了一个小网站,里面有个小功能感觉挺好的,在此与大家分享一下,还请各位大神不要笑话小弟的无知。
此功能大概是这个样子的:点击下图中的类别名称,就可以对类别进行修改。
点击类别名称以后,原来的表格变成一个可编辑的文本框,并全选里面的内容,此时可直接进行修改。回车或者鼠标点击其他地方,提交修改内容.
如果不做修改点击别处或者按“Esc”或回车键,就会回到之前的样子,如果修改后跟其他类名重复就会有相应的提示:
如果类名没问题就会将修改后的内容显示到页面,同时会修改数据库的值。
数据库修改前 数据库修改后
用到的js代码
- <span style="font-family:'Microsoft YaHei';font-size:16px;">/**********************************************
- 创建人:刘水镜
- 说明: 可编辑的表格
- **********************************************/
- $(function () { // 相当于在页面中的body标签加上onload事件
- $(".caname").click(function () { // 给页面中有caname类的标签加上click函数
- var objTD = $(this);
- var oldText = $.trim(objTD.text()); // 保存老的类别名称
- var input = $("<input type='text' value='" + oldText + "' />"); // 文本框的HTML代码
- objTD.html(input); // 当前td的内容变为文本框
- // 设置文本框的点击事件失效
- input.click(function () {
- return false;
- });
- // 设置文本框的样式
- input.css("border-width", "0px"); //边框为0
- input.height(objTD.height()); //文本框的高度为当前td单元格的高度
- input.width(objTD.width()); // 宽度为当前td单元格的宽度
- input.css("font-size", "16px"); // 文本框的内容文字大小为16px
- input.css("text-align", "center"); // 文本居中
- input.trigger("focus").trigger("select"); // 全选
- // 文本框失去焦点时重新变为文本
- input.blur(function () {
- var newText = $(this).val(); // 修改后的名称
- var input_blur = $(this);
- // 当老的类别名称与修改后的名称不同的时候才进行数据的提交操作
- if (oldText != newText) {
- // 获取该类别名所对应的ID(序号)
- var caid = $.trim(objTD.prev().text());
- // AJAX异步更改数据库
- var url = "../handler/ChangeCaName.ashx?caname=" + encodeURI(encodeURI(newText)) + "&caid=" + caid + "&t=" + new Date().getTime();
- $.get(url, function (data) {
- if (data == "false") {
- alert("类别修改失败,请检查是否类别名称重复!");
- input_blur.trigger("focus").trigger("select"); // 文本框全选
- } else {
- $("#test").text("");
- objTD.html(newText);
- }
- });
- } else {
- // 前后文本一致,把文本框变成标签
- objTD.html(newText);
- }
- });
- // 在文本框中按下键盘某键
- input.keydown(function (event) {
- var jianzhi = event.keyCode;
- var input_keydown = $(this);
- switch (jianzhi) {
- case 13: // 按下回车键 ,把修改后的值提交到数据库
- // $("#test").text("您按下的键值是: " + jianzhi);
- var newText = input_keydown.val(); // 修改后的名称
- // 当老的类别名称与修改后的名称不同的时候才进行数据的提交操作
- if (oldText != newText) {
- // 获取该类别名所对应的ID(序号)
- var caid = $.trim(objTD.prev().text());
- // AJAX异步更改数据库
- var url = "../handler/ChangeCaName.ashx?caname=" + encodeURI(encodeURI(newText)) + "&caid=" + caid + "&t=" + new Date().getTime();
- $.get(url, function (data) {
- if (data == "false") {
- alert("类别修改失败,请检查是否类别名称重复!");
- input_keydown.trigger("focus").trigger("select"); // 文本框全选
- } else {
- $("#test").text("");
- objTD.html(newText);
- }
- });
- } else {
- // 前后文本一致,把文本框变成标签
- objTD.html(newText);
- }
- break;
- case 27: // 按下Esc键, 取消修改,把文本框变成标签
- $("#test").text("");
- objTD.html(oldText);
- break;
- }
- });
- });
- });
- // 屏蔽Enter按键
- $(document).keydown(function (event) {
- switch (event.keyCode) {
- case 13: return false;
- }
- });
- </span>
一般处理程序代码
- <span style="font-family:'Microsoft YaHei';font-size:16px;">using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Web;
- using Model;
- using BLL;
- namespace Web.handler
- {
- /// <summary>
- /// ChangeCaName 的摘要说明
- /// </summary>
- public class ChangeCaName : IHttpHandler
- {
- public void ProcessRequest(HttpContext context)
- {
- context.Response.ContentType = "text/plain";
- string caid = context.Request.QueryString["caid"];
- string caname =context.Server.UrlDecode (context.Request.QueryString["caname"]);
- Category ca = new Category(caid, caname);
- //判断是否已有该类别名
- CategoryManger camgr = new CategoryManger();
- if (camgr.IsExist(caname))
- {
- //存在
- context.Response.Write("false");
- return;
- }
- //更改数据库类别名
- bool b=camgr.Update( ca);
- if (b)
- {
- context.Response.Write("true");
- }
- else
- {
- context.Response.Write("false");
- }
- }
- public bool IsReusable
- {
- get
- {
- return false;
- }
- }
- }
- }</span>
功能很简单,但用起来却非常的方便,个人觉得很好,请各位大神不要笑话在下的才疏学浅。