返回列表 发新帖

基于jquery制作可编辑的表格特效

394.9k 13
swmozowtfl 发表于 2015-7-15 20:24:54|湖北 | 查看全部 阅读模式
最近做了个项目,其中项目要求:点击表格后可直接编辑,回车或鼠标点击页面其他地方后编辑生效,按esc可取消编辑
! g+ C; |+ {& d2个小伙伴给出了2中解决方案,大家来看看哪种更合适呢?+ G( J" g6 `. r4 T( m- B3 E
第一种单击表格可以编辑的方法/ r) h2 n6 m+ V* g6 X4 x0 B
代码如下:
% n2 Q) k& @8 F9 `4 o! R" ~
//相当于在页面中的 body标签加上onload事件
% G+ T7 H7 R1 d+ U& u8 J# _3 h7 w/ d$(function() {; C  e0 P6 A% u
//找到所有的td节点
0 b+ l  A/ ?& A; }var tds = $(td);
. f% v: o& H3 H//给所有的td添加点击事件
( P/ i8 r" n; s' c5 V9 E0 Ltds.click(function() {* q! c/ ~5 d# i$ l3 Z6 D# d$ W# |* h! ~
//获得当前点击的对象) O% Y! J2 n( n0 C/ Q
var td = $(this);" c3 C, ?( [7 o
//取出当前td的文本内容保存起来
' _  J6 a4 |) [2 m! S9 Tvar oldtext = td.text();
. g5 G0 h. l2 B& t6 i//建立一个文本框,设置文本框的值为保存的值: E. m6 @- t8 x
var input = $(<input type='text' value=' + oldtext + '/>);- S9 ?1 d# U, H! c0 I% v
//将当前td对象内容设置为input
( Z- S9 j" J4 z' d  `td.html(input);8 h( t% ?: M" J
//设置文本框的点击事件失效6 p1 c; S2 m' |6 L8 m- ]* a& F' s
input.click(function() {
7 y5 |7 i: m' L7 Freturn false;! f& o- u6 m$ n5 _3 U: [
});
* K7 s3 a1 v( K8 k) m$ W8 D//设置文本框的样式
, i- j- |! q& |( H# a/ [+ w. Ninput.css(border-width, 0);
0 v0 X; h* }* B) M2 sinput.css(font-size, 16px);% H' O& [7 U% U7 J. C) o
input.css(text-align, center);( V7 m. s. s% U. A% a- o8 @3 H
//设置文本框宽度等于td的宽度
0 Y) P8 j+ L& p3 r6 g& Finput.width(td.width());
4 I9 V  f$ k! k+ N5 z//当文本框得到焦点时触发全选事件$ H, @  ^" I; l% Y( r+ Y
input.trigger(focus).trigger(select);
6 ~; ?' E6 Y$ E+ a! J9 ?2 I1 ]//当文本框失去焦点时重新变为文本, W$ ?/ n% p" X& S. X! {
input.blur(function() {! X5 T  y% y5 A' I
var input_blur = $(this);
7 |* I! k% _# w: k4 P//保存当前文本框的内容
) I* P3 `9 G. |0 x. Zvar newtext = input_blur.val();1 V+ B) N: m4 ^" J
td.html(newtext);. G: V3 t  V  [  g. W0 `
});0 G% c8 E! c! v+ Z
//响应键盘事件
5 e; v! H% K/ t4 p7 {  finput.keyup(function(event) {% d! T. F8 ]! \4 f7 n$ ?
// 获取键值
& D( g. `# t% Qvar keyevent = event || window.event;
) C% Y' b% s# ivar key = keyevent.keycode;: @! G8 u0 B$ b. ^5 w  ~" F7 I
//获得当前对象
  W  I  R% w, |8 n, w- H5 tvar input_blur = $(this);
! z+ k. m, z( h- W1 y, d+ Yswitch (key)
+ u- P2 K* x4 U+ v, ?{$ j4 C5 }  c3 C; ~1 p: T: V
case 13://按下回车键,保存当前文本框的内容# e; N8 O) |2 q( }
var newtext = input_blur.val();
: X" B" r" L, \1 Ktd.html(newtext);
' L! A$ O% S: J, {# ]break;) d  ~# y% [# W2 y! y# `
case 27://按下 esc键,取消修改,把文本框变成文本" ^8 |6 |6 M; T$ i% d; b; W4 s
td.html(oldtext);
9 _8 i1 ?4 A6 t+ I" Zbreak;
" D1 K9 R/ v1 x) _}$ |, D: M4 }$ j6 `/ k/ f8 Y
});4 W4 @$ i5 S, {% j4 ~5 f* S$ C/ l
});1 f# t! G+ ^. r4 ]) r+ V  y( A5 A! z
});
! n* g& G, V4 E第二种单击表格可以编辑的方法7 r( _9 H# X! w% {$ G' u
代码如下:! M! L+ _: X* n; Y3 \. v0 S3 T3 A
$(document).ready(function(){- z. k) g+ b' |# Z+ O
var tds = $(td);
- y: y: t- D# k$ Btds.click(tdclick);/ v- d% N. r% Q1 B3 |
});9 j1 P5 k0 G) s& f
function tdclick(){* A' H0 T* g& h0 C: x4 n' ]! D
var tdnode = $(this);
/ V# o4 d- d( C* i% ^# n2 rvar tdtext = tdnode.text();; k& s9 B! e! d0 Q; V3 U/ G! e7 M
tdnode.html();1 ~# i% y0 t7 d
var input = $(<input>);
1 @: G/ h6 Y! c6 r# q5 Q8 kinput.val(tdtext); // input.attr(value,tdtext);) X  e1 G! p+ J5 S6 Y& Y
input.keyup(function(event){
; _& \) e7 [5 h) \( \- Qvar myevent = event || window.event;3 g& p' T; ~$ z, o& q3 e! o
var keycode = myevent.keycode;
, x& K' g' [5 _8 M& i  xif(keycode == 13){
. L6 M: m6 q! ]& |0 H" kvar inputnode = $(this);7 V  O1 @5 Z" a. [) u
var inputtext = inputnode.val();2 e$ l( w& H3 b+ i2 k
var td = inputnode.parent();. B5 C- |+ K" U1 S0 J& p! k! d
td.html(inputtext);2 O% w* c& v, J$ e3 S5 [; u
td.click(tdclick);
5 {& Z4 S0 h( s6 T' t}
5 w) @' n9 F- Gif(keycode == 27){ //判断是否按下esc键
  {! W& m4 X) R4 Z* l. c: D$(this).parent().html(tdtext);) Q$ T# u9 [* f! |
$(this).parent().click(tdclick);
0 R% A7 y* z# T/ K5 ]}
8 f; S( ~3 @" Z& ^* l});
+ `- ^  T" Q0 ~7 k( G' H; stdnode.append(input);
6 _! ^4 O$ ~9 J6 y  Mtdnode.children(input).trigger(select);
' Q0 x9 x% r) Y% L: C8 T//输入框失去焦点,所执行的方法' j1 ]" o: H; a7 l5 i- S
input.blur(function(){$ C& v# _8 X  }/ {: ~" r6 T
tdnode.html($(this).val());
9 p8 _5 _$ h6 n" z4 mtdnode.click(tdclick);
7 b( |1 G/ M0 }  B8 l0 [& f- u6 e" p});
; P8 \5 _' J5 N, dtdnode.unbind(click);2 c! v1 Q% M( @4 l' ~
}
" G& E0 [4 g4 O) S' v% M- J& M) o想比较来说,个人更喜欢第二种一些,小伙伴们是什么意见呢,欢迎留言给我。. [  |0 ]8 D; r/ D2 N

: [. ~2 F' C' Y更多网页制作信息请查看: 网页制作

回复|共 13 个

Acropozelan 发表于 2016-1-20 21:26:18|美国 | 查看全部
我怎么就踩不死你呢??
mwxny 发表于 2016-1-20 21:26:23|德国 | 查看全部
哈哈 ok ~~~
alapScady 发表于 2016-1-20 21:26:38|美国 | 查看全部
想骂你.却不知道从何骂起.
Acropozelan 发表于 2016-1-20 21:27:01|罗马尼亚 | 查看全部
我也不知道了~~你把我问蒙了 呵呵
wwzcdenleclv 发表于 2016-2-25 12:39:35|湖北 | 查看全部
我也不知道了~~你把我问蒙了 呵呵
GoodyFouppy 发表于 2016-2-25 12:39:44|广东 | 查看全部
挨骂也是幸福~~~
tohme 发表于 2016-2-25 12:39:46|北京 | 查看全部
看你快沉底了~~~~~~
alapScady 发表于 2016-2-25 12:39:51|山东 | 查看全部
对于这种刚发的帖子,我总是毫不犹豫的顶了。如果火了就是个前排,可以混个脸熟,说不定谁好心就给粉了…稳赚不赔;如果沉了就感觉是我弄沉的,很有成就感,还能捞经验。
seazvyt 发表于 2016-2-25 12:40:12|广东 | 查看全部
这是怎么了啊??
buingeEvineus 发表于 2017-4-11 15:58:03|Reserved | 查看全部
晕倒`````不要造我的谣言哦~~小心我打你pp~~嘿嘿~~~~
buingeEvineus 发表于 2017-4-11 16:03:03|美国 | 查看全部
我帮不了你
GoodyFouppy 发表于 2017-4-11 16:04:32|匈牙利 | 查看全部
刚才游戏去了 ~~嘿嘿~~
wwdu926a 发表于 2017-4-11 16:04:58|INNA | 查看全部
什么啊

回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

得知互动是一个融创意、设计、开发、营销、生活、互联网于一体的专业交流分享平台。
Copyright © 2026 得知互动-专注Ai与站长技术交流社区-Ai交流平台 版权所有 All Rights Reserved. Powered by Discuz! X5.0 鄂ICP备15006301号-5|鄂公网安备 42018502006730号
关灯 在本版发帖 扫一扫添加QQ客服 返回顶部
快速回复 返回顶部 返回列表