返回列表 发新帖

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

394.4k 13
swmozowtfl 发表于 2015-7-15 20:24:54|湖北 | 查看全部 阅读模式
最近做了个项目,其中项目要求:点击表格后可直接编辑,回车或鼠标点击页面其他地方后编辑生效,按esc可取消编辑& z& D+ J4 x) g  u1 d' p" G0 p5 b
2个小伙伴给出了2中解决方案,大家来看看哪种更合适呢?* \, {  \, {4 P8 S( I
第一种单击表格可以编辑的方法& @) B3 \) D% z
代码如下:
. A$ D2 f5 b, h" n4 j' K
//相当于在页面中的 body标签加上onload事件0 \2 Q+ k% T' P7 T2 H% i
$(function() {1 k8 {5 a( r) p  p8 P
//找到所有的td节点( _  h8 S! s: N& x
var tds = $(td);
/ T- i3 K$ m& t% T" A( l% g6 t//给所有的td添加点击事件. t; |3 o3 b  }8 d% A
tds.click(function() {
. Z. D6 R4 W5 h//获得当前点击的对象
! J! [$ B+ q5 i5 b8 m& ovar td = $(this);* w- X% E. T- o# c, W
//取出当前td的文本内容保存起来
' D$ L% y7 m9 L' n$ k; M# Svar oldtext = td.text();' p8 |6 b  Z$ P: {; `' t' W
//建立一个文本框,设置文本框的值为保存的值
9 u( u  p: ^* ?6 L! ?var input = $(<input type='text' value=' + oldtext + '/>);( }7 U, w+ _; h7 S4 W
//将当前td对象内容设置为input
8 B+ ?" r4 H2 q5 P" Ptd.html(input);7 d8 G- v2 H0 T' r3 V
//设置文本框的点击事件失效5 \9 D1 I" ~. Z2 Z5 @- n
input.click(function() {1 Q1 _! Z- w5 v+ O4 c  ?& W
return false;
9 E! p: E( U6 h% ]1 {: q});
7 i5 O( j: e. g//设置文本框的样式8 v0 Q# s3 O! C3 Z
input.css(border-width, 0);& l9 b$ t% ^+ u. H: S9 m" V5 n* _" y
input.css(font-size, 16px);
$ _+ b  h" Z9 K, u* T, tinput.css(text-align, center);& ]- Y' r! \" ?( Q5 B- G
//设置文本框宽度等于td的宽度3 {. o6 }$ _& c' @) C
input.width(td.width());: l. ^( m; \! f7 x$ w! X3 u  i
//当文本框得到焦点时触发全选事件
/ K* M7 C. x- A! ?7 c, D$ V8 ninput.trigger(focus).trigger(select);4 C( e" _9 u4 F" ?
//当文本框失去焦点时重新变为文本
4 D  v4 ?: l9 w* Dinput.blur(function() {
0 q$ ]# M: I' l7 Mvar input_blur = $(this);
4 P# f$ t" ^% L2 r2 Y! w//保存当前文本框的内容" B1 c2 @# Z4 r
var newtext = input_blur.val();
+ ^& X. v5 Q7 ]' Z& Etd.html(newtext);' P/ V& {. x2 H: k) W3 p" h1 ?
});
* ?- e! Y1 g" w: L2 s# y: {+ o//响应键盘事件
: f! p( C% |( Dinput.keyup(function(event) {# d' q* L5 [  D7 ]: v
// 获取键值' H3 S9 n* g, L0 T
var keyevent = event || window.event;" W* a( h1 b# _
var key = keyevent.keycode;3 v7 V! |0 B# K2 g8 g& X
//获得当前对象
: n1 K5 w; C0 ~* b4 Cvar input_blur = $(this);
# y: x* Z- s# E) E5 F# dswitch (key)" I: @( q6 W5 o& h( ^5 o" ?+ a
{' m  {2 u/ p' J% [+ s3 q
case 13://按下回车键,保存当前文本框的内容5 K& w+ L) }% R; w
var newtext = input_blur.val();- {% c0 \" |& Z* m% }
td.html(newtext);, P# D+ _: J: R/ K7 K7 h5 u1 J3 b
break;
  D/ i$ @/ J* N; }( C9 Pcase 27://按下 esc键,取消修改,把文本框变成文本3 z! w+ u1 G. n: g, N5 O
td.html(oldtext);3 ~' [7 T3 N5 d% ?2 [) F
break;
$ c' H$ ?+ e& B4 S/ ~+ w; l7 w! p+ H}. C1 k7 z$ A6 I7 n$ W7 W  a
});
; X4 o* p: A, }# Y' n# Y});
9 n' q+ T' Z  h5 _! G3 m});$ L4 h- r2 K, n+ t% ?* R
第二种单击表格可以编辑的方法1 r. c' U1 v( T4 p1 y) D# d
代码如下:5 T9 d% M& w6 j$ R, I7 G& D
$(document).ready(function(){& M5 K% @! g: L2 r* z
var tds = $(td);
  D$ _$ Z$ m+ U( |9 u6 {tds.click(tdclick);
" R' p3 t; k5 i- j});
2 ^9 I8 z+ x2 h0 K, m3 ]function tdclick(){9 N* [2 Y6 A* e, a9 _  ?1 D' K) g
var tdnode = $(this);3 E- L9 H0 I# a( u
var tdtext = tdnode.text();3 k$ G( w/ G1 l3 u' _0 I( X
tdnode.html();
. t$ W5 c( {" w4 Mvar input = $(<input>);
  R. s+ E, ]- r5 b  qinput.val(tdtext); // input.attr(value,tdtext);4 C3 L+ g' ?. a- D7 L* V+ T
input.keyup(function(event){; J, D4 h$ [( M+ S3 I
var myevent = event || window.event;
3 w! P' l% c0 ?- Q7 W3 G$ d! D# {var keycode = myevent.keycode;. l3 n2 K) q: e( b% r4 M) t/ n
if(keycode == 13){0 s' ]4 s" }7 {1 }6 N+ ~, A; c: N
var inputnode = $(this);
3 N& o+ S# o& l6 C) Nvar inputtext = inputnode.val();
% W- Y# X* b& o; Q6 @var td = inputnode.parent();( ^7 |& @" i7 r0 W- U# W
td.html(inputtext);/ p( |' U8 k, X9 a1 e: |6 y
td.click(tdclick);
0 Z8 `2 ^! d* P+ ]# D+ h3 H}
3 I& l% j# [6 B* @8 A8 oif(keycode == 27){ //判断是否按下esc键3 S$ Q  M  E; N$ s9 ^: \
$(this).parent().html(tdtext);
5 C$ ]% h3 j8 f  X# G0 F' J) m$(this).parent().click(tdclick);" Z+ u! s, E8 l% ]' X
}" y9 s# c- `1 X% i. t
});
# J; J0 Y' ?  C) k; G; Otdnode.append(input);6 c3 \( V# ?5 S3 V8 G$ v* i
tdnode.children(input).trigger(select);
, Q( u) c$ `# \, ?! P  W+ s3 ~: X2 p. u//输入框失去焦点,所执行的方法) y8 \% i$ p* X0 M7 r; d% m
input.blur(function(){" b5 K* y. S. }# U  _
tdnode.html($(this).val());, F) S& [0 r& M( ^
tdnode.click(tdclick);+ Q$ J! r, d+ E+ L3 P9 M( `
});
& y2 _8 L9 |; Z. B$ a7 V. q. Utdnode.unbind(click);" R# y8 k5 g1 F0 u. K3 k' x+ Q
}7 D! @/ ?: p5 C2 o' C) O6 v
想比较来说,个人更喜欢第二种一些,小伙伴们是什么意见呢,欢迎留言给我。
1 ~" _! G2 e2 ^* U  w$ F! d% p# Y' w: ]' ]1 \* s& D' n7 I
更多网页制作信息请查看: 网页制作

回复|共 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客服 返回顶部
快速回复 返回顶部 返回列表