最近做了个项目,其中项目要求:点击表格后可直接编辑,回车或鼠标点击页面其他地方后编辑生效,按esc可取消编辑
1 M a. P. W8 }3 w1 I! c2个小伙伴给出了2中解决方案,大家来看看哪种更合适呢?$ d$ e# e O0 L6 @8 P2 _
第一种单击表格可以编辑的方法7 o) [( i; B' B6 g6 d
代码如下:
& W% k( U4 f" }2 s; X3 I//相当于在页面中的 body标签加上onload事件
F. E. k( k7 X& W. Q$(function() {. {7 d$ }6 h2 J: h8 A
//找到所有的td节点
) l, {% v) w7 R3 M+ C2 h+ _var tds = $(td);2 S% G* u5 [+ E* O9 X! D
//给所有的td添加点击事件. y8 h1 `6 l( V6 b y4 G8 V9 R
tds.click(function() {; ]6 K3 ]( ]0 S- G
//获得当前点击的对象- k6 S+ K2 S3 x! w9 `0 ]1 z
var td = $(this);
. p% e# P3 U' a/ P w! T//取出当前td的文本内容保存起来
# ^& M7 Q" S1 b; [4 ^/ {# ?1 j& Rvar oldtext = td.text(); w: u5 ]4 L5 p8 r2 @1 p5 y
//建立一个文本框,设置文本框的值为保存的值: K) `* L5 h: q2 A
var input = $(<input type='text' value=' + oldtext + '/>);
3 k' E- |# S* Z3 T8 i; p//将当前td对象内容设置为input" R) N K A) D
td.html(input);8 G4 C O$ W+ b: ^; W" r
//设置文本框的点击事件失效
w' S+ A2 x( d6 t/ D( h% c) M* ?( ainput.click(function() {
j: \' `. a: R! d1 L, xreturn false;% |- ^. @) F( q; m
});
1 T4 N: c" {6 w) K, s; ~//设置文本框的样式1 w! m' f% Y' f
input.css(border-width, 0);3 E0 m6 r0 }+ c, Y' X1 S
input.css(font-size, 16px);
* ?" m+ Y. D6 I$ K0 J$ c2 linput.css(text-align, center);8 y* K' Z5 h$ G/ @2 x7 g6 t# L
//设置文本框宽度等于td的宽度4 q2 [3 D8 W0 n3 x
input.width(td.width());
. V2 z. Z2 R$ u( N//当文本框得到焦点时触发全选事件
5 B0 i- k z; Q. H) {) _input.trigger(focus).trigger(select);& H0 X. I) A7 Y) V! T2 _, @, m% a5 W0 F
//当文本框失去焦点时重新变为文本) p( Y- J: P# {% h0 F6 X
input.blur(function() {
7 R5 p/ y) X" W9 Q5 bvar input_blur = $(this);5 }, z+ X) w; f. S T! Y2 Z
//保存当前文本框的内容
: |- C7 c' T# M" j+ ovar newtext = input_blur.val();
( x7 s/ X# }6 \6 Z5 |5 Ftd.html(newtext);$ |# ~1 ?- J5 z0 _7 j
});
# U6 k9 U5 ]% ^8 r8 u" N6 \//响应键盘事件* F# x1 W; E( }: V
input.keyup(function(event) {
+ G$ r! Q2 M/ l% z- ^// 获取键值
" u# @$ q) C2 N. zvar keyevent = event || window.event;+ i( C! p2 ]; W5 T U) `4 F
var key = keyevent.keycode;* y. ?/ s4 T9 k; c9 N& ~
//获得当前对象. r7 [* M8 L# g/ |- K
var input_blur = $(this);: C, d2 @1 e7 c, J" q
switch (key)
! j% W+ I4 L6 Z# J3 ]4 J* c( o{
0 V$ J. z4 j: B+ |* p* wcase 13://按下回车键,保存当前文本框的内容
# O, C4 b& k% a/ t3 {var newtext = input_blur.val();
' Q4 q ^: `! ?1 S6 j. S# @td.html(newtext);$ Y7 d' \! I5 j! r# E8 `3 f
break;
/ U$ g- [. F6 e9 tcase 27://按下 esc键,取消修改,把文本框变成文本
. r |- T8 [" \: r. b Itd.html(oldtext);3 [( \ I, y" Z8 a
break; i1 a5 ]% a4 _
}- K$ M4 I3 |! Z6 z$ F; T2 J8 \
});0 t9 K! C7 F# x0 a: e7 s5 Y5 o
});1 p( h" n8 @- _6 m- B0 X
});: ?* |3 ~( r7 b. P4 N
第二种单击表格可以编辑的方法
. W9 I& p g3 M* W* |1 i代码如下:$ k4 D: R( Q' m
$(document).ready(function(){/ d7 p; W; a+ T6 d9 S, n
var tds = $(td);) h0 C' t& \# p& f( e
tds.click(tdclick);
) J8 @& i) E8 \5 S});
7 h7 U, O% F+ t: W$ wfunction tdclick(){4 A1 d1 `1 u0 g
var tdnode = $(this); {0 e4 T8 _/ D5 g6 N. b' y p
var tdtext = tdnode.text();
# P; m' v3 k6 j9 e" Ttdnode.html();
5 w: ?& x5 U: D9 cvar input = $(<input>);
" \/ S7 }: s) n1 _& c) ^; Qinput.val(tdtext); // input.attr(value,tdtext);; x( E; R' Q* }" E. Q( k. M
input.keyup(function(event){
+ N! i5 o$ f* j9 z) p' H. vvar myevent = event || window.event;
" I! v+ F2 \. b$ X! |* a) C6 Pvar keycode = myevent.keycode;' d$ s5 ` t) F* m' A; \
if(keycode == 13){
! @1 ]$ ^, V7 E- Pvar inputnode = $(this);% v+ p0 g" n: Q8 f
var inputtext = inputnode.val();
) f( _7 t4 O7 i: @var td = inputnode.parent();
+ z5 Y- x4 {1 ~) l$ utd.html(inputtext);0 L. X" A6 R' ?
td.click(tdclick);8 i& M, I/ S3 c q) S- D
}
7 v( R- ]; N5 O8 @, L/ w9 g& pif(keycode == 27){ //判断是否按下esc键
3 S( g/ ]: m$ b/ k5 a Y1 Z% K$(this).parent().html(tdtext);
5 }! U" S; V( d8 U" W, f$(this).parent().click(tdclick);
! v9 _. p }. p, S6 _}; w+ C/ {2 N$ V3 \( Z8 K' V& a
});
0 Z9 U# i; Y: htdnode.append(input);1 i9 V F6 _4 a( Z! ^8 g8 H$ s
tdnode.children(input).trigger(select);. p c9 L0 ^/ p
//输入框失去焦点,所执行的方法+ m4 o9 O C# m0 t
input.blur(function(){
% c. l% u1 a' Y1 R! O+ Utdnode.html($(this).val());7 {: R. x/ u6 }& I4 \! _
tdnode.click(tdclick);
9 o8 m+ b+ u) M1 R, X9 E1 C});+ G r% v4 y3 [6 w
tdnode.unbind(click);0 ]/ B& l- @+ Z
}+ A7 u. y/ a- R) y# y" a7 t
想比较来说,个人更喜欢第二种一些,小伙伴们是什么意见呢,欢迎留言给我。
( V2 T: z0 p1 [. c* j+ ~0 o% |# L1 H% t
更多网页制作信息请查看: 网页制作 |
|