返回列表 发新帖

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

394.5k 13
swmozowtfl 发表于 2015-7-15 20:24:54|湖北 | 查看全部 阅读模式
最近做了个项目,其中项目要求:点击表格后可直接编辑,回车或鼠标点击页面其他地方后编辑生效,按esc可取消编辑% W, c8 m, B1 t7 C- A2 ^7 ]
2个小伙伴给出了2中解决方案,大家来看看哪种更合适呢?4 z4 X( b) v1 i# @
第一种单击表格可以编辑的方法. M1 t" d2 o4 Q2 ^* P! V4 F: H, r
代码如下:
) F* g( N. U" G% |: q, {2 p
//相当于在页面中的 body标签加上onload事件
, l. z- I2 N. z7 ^  p/ k5 N$(function() {1 j& ]1 o/ ~& E1 i0 t
//找到所有的td节点
& P8 _, `5 m5 K; F* {1 V. evar tds = $(td);
  |9 v. @& C9 F( o1 z; {//给所有的td添加点击事件1 p/ _9 O6 S8 M0 |1 ~) T
tds.click(function() {
" J$ R! {+ c5 Q( {' ]. C, ]//获得当前点击的对象
& n* X8 @; t' @% w6 qvar td = $(this);
0 T1 Z  U' X% z- V  q/ a/ s- |4 L//取出当前td的文本内容保存起来
" X/ A' Q* b. uvar oldtext = td.text();
* A6 d3 Z0 \/ |( I//建立一个文本框,设置文本框的值为保存的值
* e: }1 h$ K) K* U0 f- r6 P8 V1 v1 cvar input = $(<input type='text' value=' + oldtext + '/>);
0 M& H8 N4 Y, V//将当前td对象内容设置为input
' O& ]# k& |! A+ n* `  Ytd.html(input);) o. [7 Z- _  S- b' d+ E
//设置文本框的点击事件失效
+ h: o9 v  w0 C2 J2 J+ W1 {  X( y! C" ^input.click(function() {6 Y3 }- h% N. \7 P2 S* T
return false;8 u" D7 l- ?0 x, l8 W/ Q1 x5 m
});9 w' d, z4 H  B+ s
//设置文本框的样式
. V& y: l1 o6 }0 E6 w7 s5 Einput.css(border-width, 0);$ V" P9 x) q% ?
input.css(font-size, 16px);; h/ X' u( ~% O) V0 w5 s, f
input.css(text-align, center);" p. z$ z7 O7 l: J) Q
//设置文本框宽度等于td的宽度
# Z3 t& X: @. dinput.width(td.width());# b! n5 F" I/ y  f4 Y( X
//当文本框得到焦点时触发全选事件+ d7 X" j# Q: p5 X
input.trigger(focus).trigger(select);6 _/ w' _7 P3 i+ d' M4 K. Q! _/ G0 T0 R
//当文本框失去焦点时重新变为文本9 N& I2 C8 u0 ?$ z: A$ E6 P
input.blur(function() {2 K; V, M& v  }: a4 g
var input_blur = $(this);
9 W( W) X  K  J4 b- r( k  z//保存当前文本框的内容( o, R0 S# e/ j4 W: ?9 p
var newtext = input_blur.val();
8 l4 Z$ w" x, N& l4 q: H) rtd.html(newtext);
/ ~8 I5 E3 [) ?& D) I  P. L});# T7 ?. G5 F& ?- K$ p+ @
//响应键盘事件
: i6 r( s% y( k0 ^2 p4 minput.keyup(function(event) {$ z, H3 A7 E) y+ q
// 获取键值
/ c) k' G/ m2 q. @- g: s( Ivar keyevent = event || window.event;
" o/ ]- {4 n: Z9 Zvar key = keyevent.keycode;* C" V# _2 U# P8 X, Y* B2 U, ^, _4 v
//获得当前对象
' o: D+ M4 E# y3 j) ^  mvar input_blur = $(this);: z8 \- O, C! s- F! X  g
switch (key); u, v% g9 s0 w& ?  n- {3 g
{
1 k" |( r% q* T( c2 Wcase 13://按下回车键,保存当前文本框的内容) p: h# `4 k: |0 E8 Y4 u
var newtext = input_blur.val();/ \: U# P/ W. W) P; D
td.html(newtext);, {* S2 A: e! z! d8 |2 L" S5 X
break;
1 {/ j) Y( \+ C- ocase 27://按下 esc键,取消修改,把文本框变成文本
3 G+ Q! s2 M4 H3 btd.html(oldtext);
/ ?4 \; @* i: k! \break;
6 O, L: ^( w8 I8 ~7 m0 G}
' t: f- h5 c3 _" c8 m});7 B: h7 P4 v5 P+ G1 S% M" j
});/ x3 Z& i4 ^+ O% l: S( T* D
});+ m/ e7 _0 W( \6 @
第二种单击表格可以编辑的方法! k. y9 i- @) `; ^- j0 v1 v. x
代码如下:5 b# q  I5 q8 O4 I$ i" u; d8 M. U
$(document).ready(function(){* u7 q$ C! g5 O
var tds = $(td);# C0 r5 [) A+ N0 V1 v7 r
tds.click(tdclick);$ {. u7 V7 A4 ?4 Q: e
});+ d* `; c, C# ]' x! X6 X4 _  I
function tdclick(){
7 }: {0 _. }) \2 \' o) avar tdnode = $(this);
( J0 k; o2 M# y5 {3 r% [% Jvar tdtext = tdnode.text();8 J2 h9 ~7 `8 ?
tdnode.html();* z- r6 V7 ?  j9 t& D7 y
var input = $(<input>);
5 K0 Y- t! A: g: P' h1 Zinput.val(tdtext); // input.attr(value,tdtext);( E7 T. I/ ?5 G
input.keyup(function(event){$ t7 m% A) ~3 O" |8 ]' X
var myevent = event || window.event;
+ w. w3 f6 t* S" a" ^/ [+ \! ?5 j2 `var keycode = myevent.keycode;$ t: q. I* [# p5 g0 _7 i/ g- b8 N1 f
if(keycode == 13){- I! u; S& S5 f- b& z1 b# W" G, e9 b
var inputnode = $(this);
/ }5 q/ @: d* h. O( L0 L) }  a  }. Uvar inputtext = inputnode.val();/ |1 [9 }5 N) n7 H3 W5 J8 |
var td = inputnode.parent();) Z2 N3 e: I4 e
td.html(inputtext);) n( x0 i, q4 U- [4 {$ `  J6 k
td.click(tdclick);+ H/ p/ T% n; _5 K) N. C/ K. c
}
  C% w/ V" P9 \6 Nif(keycode == 27){ //判断是否按下esc键. Q  B4 j; M; ~: ~
$(this).parent().html(tdtext);7 o, j9 j( K8 d( k% C
$(this).parent().click(tdclick);
( G& l, n9 e9 }/ @}
8 _0 ?6 g( }  ]% h6 I1 S' U});3 e0 P4 x; P* [' y
tdnode.append(input);& [; V0 J2 @8 |$ `+ _6 R9 ~2 }/ ]
tdnode.children(input).trigger(select);  n9 @6 m: r, o4 c8 S$ ^# _
//输入框失去焦点,所执行的方法, A) [7 P6 _6 Y
input.blur(function(){, U+ ?* c) d7 O+ g2 k9 J- K& @4 D
tdnode.html($(this).val());
7 z% {# I8 l3 ?tdnode.click(tdclick);
) C- V6 |7 {8 B+ b});, u$ N( C2 }! ]9 e& K% X/ y
tdnode.unbind(click);) x8 i5 J, ]% y+ R
}) Z. u9 O( O# w7 T% W  w
想比较来说,个人更喜欢第二种一些,小伙伴们是什么意见呢,欢迎留言给我。
3 S# K) m# O; X, C9 i- Q& J! s: Z
, P+ H6 }8 v3 c/ Q( ]  Q& g% Q更多网页制作信息请查看: 网页制作

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