返回列表 发新帖

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

394.3k 13
swmozowtfl 发表于 2015-7-15 20:24:54|湖北 | 查看全部 阅读模式
最近做了个项目,其中项目要求:点击表格后可直接编辑,回车或鼠标点击页面其他地方后编辑生效,按esc可取消编辑, P" }  u/ R- {6 H4 d) o
2个小伙伴给出了2中解决方案,大家来看看哪种更合适呢?1 g& o, I! v& B* a, e
第一种单击表格可以编辑的方法3 i  M! J8 M( Z8 e
代码如下:
* h# y" B& R! n- h
//相当于在页面中的 body标签加上onload事件3 \6 _! v( C+ E: i* P, R2 [
$(function() {0 U1 \- W( ~. C
//找到所有的td节点
( `  Q) k8 ~2 y( k9 j, c  ~  m5 Ivar tds = $(td);
. @% M4 u/ ^$ y" _$ Z//给所有的td添加点击事件7 m- r9 u# b- }! n; y7 ^
tds.click(function() {! @4 b5 [0 \4 ?+ c, c0 E
//获得当前点击的对象
9 Q" H, n) o6 B" g. b+ g: e, [var td = $(this);. g8 F' t$ h0 I
//取出当前td的文本内容保存起来  j' k# p3 Y, X6 }$ f
var oldtext = td.text();
1 M: R; Y7 O0 r4 K3 ]3 z//建立一个文本框,设置文本框的值为保存的值- }; g* i$ j; ?! a
var input = $(<input type='text' value=' + oldtext + '/>);
4 v) b4 ^3 k4 q" Q% j/ ]8 d% u//将当前td对象内容设置为input
+ p" X4 ]% R6 S. w5 a, i3 vtd.html(input);
$ L/ Q0 C+ E, Q5 T  Y//设置文本框的点击事件失效
7 }6 f+ k! K9 u* g2 ainput.click(function() {
/ g% {3 l& j1 K/ E! E: greturn false;
1 }# b, U% S8 @});
: ]( e7 C, J0 T3 \3 V9 V//设置文本框的样式
1 v& j' P7 D% H: G) M' H) Ninput.css(border-width, 0);3 q9 l. }, f1 |( y
input.css(font-size, 16px);
) h# r( O* l" ]$ tinput.css(text-align, center);
7 o  g8 o! f0 A( q6 P) s' d8 z//设置文本框宽度等于td的宽度; E; Y6 g; ~2 h
input.width(td.width());# f4 w  m2 G- x7 K
//当文本框得到焦点时触发全选事件* d# Z. N( Z; c' [+ C2 q
input.trigger(focus).trigger(select);
' e. I6 O# l* J8 C5 v' ]//当文本框失去焦点时重新变为文本# E. o5 u$ n# w' M6 h% M
input.blur(function() {) Y  n6 ^! a0 m" R
var input_blur = $(this);
, E" A' ]5 L, O# R8 }* v( d/ n//保存当前文本框的内容2 j  l2 T6 C- l
var newtext = input_blur.val();+ L+ c" H1 Y) I
td.html(newtext);
; H+ {; A( Y+ ~3 r' t});, s, w. ], a& H9 o2 [
//响应键盘事件9 \5 \' y9 `" S$ C& @* `. a
input.keyup(function(event) {, m1 D( ?: G, b5 @4 G
// 获取键值
6 `5 u- E2 U" D% u4 N) Rvar keyevent = event || window.event;
4 Y6 T# s  F1 b; o7 K+ C+ h1 uvar key = keyevent.keycode;
* R9 ^! G6 `0 _( }3 G5 a3 `5 k6 Q//获得当前对象! L4 ?( `! G$ D3 L+ h5 [1 m  x" H
var input_blur = $(this);7 c0 w" \/ z9 N% z
switch (key)
) R  L/ U5 u0 `3 L{
- N+ u# Q4 n+ xcase 13://按下回车键,保存当前文本框的内容
+ n. P% r9 s# v  s/ D9 M0 {var newtext = input_blur.val();
- T( C( i5 l3 V5 a5 ~; otd.html(newtext);
% l! p# Q  Q+ s4 h3 P- abreak;) b' U1 v- K# }" W, J
case 27://按下 esc键,取消修改,把文本框变成文本
+ F$ e0 q: K( ztd.html(oldtext);4 P+ ?$ J0 M: n, g8 E. x' y# @
break;
7 E1 N2 k2 X6 ~' C# T! a" u}9 q4 ?$ ^2 ?) ~3 j( t- }6 g+ _" n  ]
});
& ?: R, T4 C/ e5 d, w});
7 A% Y( A- i+ e, {# m5 d  Z! D4 V});. N: P4 J0 r! v3 c9 `2 m
第二种单击表格可以编辑的方法
( x, u; {0 L5 Q1 z" X* Q; Y' u代码如下:" s' e  P* E0 j& d  r* D& a9 V
$(document).ready(function(){
! k% P, S4 X; c( xvar tds = $(td);
3 ?/ V3 r$ [4 f# V- v- d- J0 Xtds.click(tdclick);9 E" }3 a. P# H$ `
});1 u3 Z- G0 V1 h2 p+ C, m1 S% _" J  `
function tdclick(){) s7 C. S. P! S
var tdnode = $(this);
. E; N  Z4 m2 C$ lvar tdtext = tdnode.text();
# l1 V3 K' ^7 `9 ]7 Wtdnode.html();
0 b8 v: e; `/ X+ ^8 Xvar input = $(<input>);' |( Z$ |5 c9 e
input.val(tdtext); // input.attr(value,tdtext);% ^0 N2 U! z, |' A! X4 t3 P' S0 q6 Q
input.keyup(function(event){
! n% J3 A! i: ~& B6 `var myevent = event || window.event;1 |/ {3 u4 W" a! [) a/ l- a
var keycode = myevent.keycode;8 k" T3 \1 B# Z, |# F
if(keycode == 13){
& L; P$ W" u3 z3 ]4 [var inputnode = $(this);% P' s# x9 ~- v+ K- m" y# M# s
var inputtext = inputnode.val();6 B7 v( K3 X4 k5 m+ k" d
var td = inputnode.parent();' T6 c8 j+ @( r2 e" O
td.html(inputtext);
. p9 V' E0 v; D- K. B$ v% {3 {td.click(tdclick);
" V; y$ o6 k1 `}# a: d! y& V( G, I2 U0 \+ h0 J
if(keycode == 27){ //判断是否按下esc键+ y% e& R. w7 E4 ~- W
$(this).parent().html(tdtext);
/ X/ ^$ l$ k4 o$ {& H0 A: ~$(this).parent().click(tdclick);  \& [7 H' L" n! k
}; O, S  k# i5 E2 G0 M8 m
});
2 i( K7 C* f% O- M0 y; k3 t) htdnode.append(input);+ \  L) r2 L2 \6 J/ P: v
tdnode.children(input).trigger(select);
. t) z1 z- e" s# H  s  f//输入框失去焦点,所执行的方法. X( B: S  A: ~! A
input.blur(function(){& M2 W* b$ d9 z  s
tdnode.html($(this).val());
8 s3 e) k6 W; H, X  L4 R' Z- Etdnode.click(tdclick);
$ q8 J9 W) [& A8 k' c});0 v4 S4 u. P6 x; B  k2 r* x
tdnode.unbind(click);
4 l6 {) ], G( u6 M1 z}3 q0 Q; D# [/ j6 n, P7 u# A
想比较来说,个人更喜欢第二种一些,小伙伴们是什么意见呢,欢迎留言给我。
( O# ]0 J/ p# Q. \! J) S, e7 C. {, q/ e- t) O; m) P' X* X
更多网页制作信息请查看: 网页制作

回复|共 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技术交流平台 版权所有 All Rights Reserved. Powered by Discuz! X5.0 鄂ICP备15006301号-5|鄂公网安备 42018502006730号
关灯 在本版发帖 扫一扫添加QQ客服 返回顶部
快速回复 返回顶部 返回列表