返回列表 发新帖

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

394.3k 13
swmozowtfl 发表于 2015-7-15 20:24:54|湖北 | 查看全部 阅读模式
最近做了个项目,其中项目要求:点击表格后可直接编辑,回车或鼠标点击页面其他地方后编辑生效,按esc可取消编辑
, U: N+ `( A  Z9 H- f( K+ k: Z2个小伙伴给出了2中解决方案,大家来看看哪种更合适呢?, K$ P8 }5 p7 G  k$ A, F. N0 l
第一种单击表格可以编辑的方法1 F/ ^3 N6 [: J" a9 ]
代码如下:$ q) J% ^; m8 ?2 H
//相当于在页面中的 body标签加上onload事件! u/ o; x$ W- a/ v
$(function() {- G" ^1 y  f8 c" u- V& |
//找到所有的td节点- h+ h/ d; ]" U% X0 U% v+ H
var tds = $(td);% L1 X9 y1 X7 n2 d! }. R
//给所有的td添加点击事件
- A$ F$ e# @' S% @tds.click(function() {. s6 U( f( f* O7 s6 d5 T
//获得当前点击的对象
/ t# S: w# K3 v4 Xvar td = $(this);
  O5 e1 Z$ P- ^2 I* G( L//取出当前td的文本内容保存起来
5 [: k+ Y# B1 N9 Bvar oldtext = td.text();
. h# a" R& t3 Y: ~! H//建立一个文本框,设置文本框的值为保存的值
( R" @* l( Z+ x6 mvar input = $(<input type='text' value=' + oldtext + '/>);/ k2 ]/ _" D& k; n' B7 b" n% N
//将当前td对象内容设置为input0 t2 X/ ]. q4 D7 g9 c! b
td.html(input);8 i: P. P2 N# e3 G: R1 i5 ?
//设置文本框的点击事件失效
: j. T  B& F7 ^: {! R! r! H3 ninput.click(function() {
& I  {6 w$ F4 O4 W1 x7 J* Creturn false;2 l( H9 l5 A+ n+ J) \
});
5 ^, ?: L. G9 D# O5 w//设置文本框的样式
7 g/ Y& |; v- ^# r' \2 w$ x3 W# Ginput.css(border-width, 0);6 d: T3 w9 x$ b; ~+ O- m: l# q
input.css(font-size, 16px);
  H/ I9 ]8 C: {; @input.css(text-align, center);
6 x, {3 Y0 v& a1 a3 ~//设置文本框宽度等于td的宽度$ }9 I: l7 D% [" I' W8 E
input.width(td.width());
2 j6 t' \4 W! X, Q//当文本框得到焦点时触发全选事件
- r# [8 z* Z& [' \  C& Ainput.trigger(focus).trigger(select);: ]+ I* w& w$ j7 G+ r( U, G' M
//当文本框失去焦点时重新变为文本
6 Y% v& L6 i. Z' K2 |1 n; `input.blur(function() {
, g+ T. i& T  ^6 ]; E) a" s# z9 Uvar input_blur = $(this);
2 j; a. P7 K5 v; v3 N//保存当前文本框的内容
- A' R" U) p% J. n$ {var newtext = input_blur.val();
6 d4 L$ M8 D0 Qtd.html(newtext);' S" }, I- R; a9 e2 j
});! w0 `4 ]6 p( U2 F, F+ j
//响应键盘事件
$ Z# T4 ]7 W& ?' n0 b1 o; Einput.keyup(function(event) {( }% p$ f7 Y; j1 @% c2 i
// 获取键值/ \. B; H8 |- z0 A
var keyevent = event || window.event;
! f: r+ H! `; \+ ^! X$ ]# rvar key = keyevent.keycode;
8 {7 o1 g7 N3 }; O( l//获得当前对象
3 C# M0 G* M5 Q6 Svar input_blur = $(this);1 m! C' z( U: ~
switch (key)
. S' @' X8 e4 k/ N, ^2 O7 W# D{
; K! R' B7 [$ ^  C5 Pcase 13://按下回车键,保存当前文本框的内容  h( X! V" M9 K8 b, z
var newtext = input_blur.val();! |; i, v& L9 }  q" m
td.html(newtext);
. k$ s4 O7 W" u# Ubreak;' R. |. o6 G* g" M1 j$ y* ]
case 27://按下 esc键,取消修改,把文本框变成文本4 y( I- z. E5 a* q! X2 x2 b3 G
td.html(oldtext);
1 w! t& I+ @! `- c. Pbreak;# Y- A- K' V* g% p9 t; u; w
}/ l6 ^- y% \9 U. M8 K6 N; L
});& h( _5 j1 x1 h9 n# @& ^1 q% D
});
3 j! r* O& ^7 p% m, o- e});2 o& E  `; Q) A
第二种单击表格可以编辑的方法# b  U- ^8 _  [5 a1 a& Y
代码如下:# ]- b% t2 w6 L. k- |$ f
$(document).ready(function(){; c- X3 w  H5 G  y, p7 h
var tds = $(td);
) m+ \  J. |8 j& q6 a' V5 ptds.click(tdclick);
3 k/ H9 l  r" }});
, x3 C8 |5 L% i# @0 E8 o% H6 i0 Wfunction tdclick(){
7 z1 a" [) }3 c% e+ K' ]+ m: jvar tdnode = $(this);
% e0 P2 ]4 |. h" c. p' bvar tdtext = tdnode.text();
5 F; ~3 Z; A5 b& f' y+ Xtdnode.html();
8 M$ g; S! P  b% g2 k: V8 Kvar input = $(<input>);
7 ~; T) @4 V/ d  o3 V9 ]  Jinput.val(tdtext); // input.attr(value,tdtext);1 I1 w& f! W4 X0 I5 T0 k; t9 K
input.keyup(function(event){
& O' }/ x; `0 o. [var myevent = event || window.event;
8 g; ]" C# z6 O7 Lvar keycode = myevent.keycode;
8 d) o/ s6 O' A$ P( n$ ]9 jif(keycode == 13){
$ O2 y& G# _# o% uvar inputnode = $(this);; z* Z4 {8 i1 f! x! U( m/ ?4 ^
var inputtext = inputnode.val();
, t" {# ~% T' p% v1 }* A8 gvar td = inputnode.parent();3 V/ d" c8 I& b8 [4 B, L5 D
td.html(inputtext);0 h) j+ P& a* M9 n
td.click(tdclick);$ q' x4 }& j: ^
}
% O0 ]: a9 f% L, S$ n* \" Yif(keycode == 27){ //判断是否按下esc键
3 `& a3 W$ C* K; J  u$(this).parent().html(tdtext);
) q1 u+ N8 Y' F! o9 b$(this).parent().click(tdclick);+ t8 J& y  p/ L! A+ p* }8 J
}8 e4 H2 G+ X% F9 D) k
});- y$ j% C: V, e$ v
tdnode.append(input);
/ p/ ^: h, d! W& F+ C' l4 u9 itdnode.children(input).trigger(select);; J: U1 K8 f3 x
//输入框失去焦点,所执行的方法! b  g1 b( j) l' E" ^" H  ?( `4 m; H
input.blur(function(){4 u* D3 k9 @# @6 L& [& V
tdnode.html($(this).val());+ E' O: Q( @+ m  ~3 k! O' j
tdnode.click(tdclick);; `7 M5 z6 t8 s9 V& S% R! ^
});
% |% H0 Q7 C$ b2 A. e" r: z4 Xtdnode.unbind(click);
' d( A$ Y6 C9 J}
/ r6 y8 a0 x) ~1 w! V# X* r$ [想比较来说,个人更喜欢第二种一些,小伙伴们是什么意见呢,欢迎留言给我。
9 n" I' l4 n' ~, b- o6 r) Q1 t! U2 s9 t+ G; r
更多网页制作信息请查看: 网页制作

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