最近做了个项目,其中项目要求:点击表格后可直接编辑,回车或鼠标点击页面其他地方后编辑生效,按esc可取消编辑
4 ]4 J- E5 O2 N/ R2个小伙伴给出了2中解决方案,大家来看看哪种更合适呢?
h3 h8 Y/ `3 `- O第一种单击表格可以编辑的方法
G) x# r( h% N代码如下:
1 ~* K; @$ N* K* K$ u//相当于在页面中的 body标签加上onload事件/ ]9 L7 y% B' D w
$(function() {# G% r" A( n/ @! c
//找到所有的td节点
, c, Z+ u) D7 Y/ I; Z. uvar tds = $(td);
1 v( o* ~. f4 E* Q//给所有的td添加点击事件
v8 R: L; k6 v- i0 i0 g) ctds.click(function() {
4 Y$ F* p' w+ a6 E; o% O, P/ k- h//获得当前点击的对象
* y$ Y6 Z5 X% _' i7 Hvar td = $(this);4 r' C6 y" Y) O3 y! T
//取出当前td的文本内容保存起来; p" n( s" E0 R
var oldtext = td.text();- V$ ~1 V/ d8 w( n2 u
//建立一个文本框,设置文本框的值为保存的值
0 {# k3 [, g5 L: Z) x- `var input = $(<input type='text' value=' + oldtext + '/>);
: A2 L0 k; t) p2 \3 w//将当前td对象内容设置为input
) E) @& |! z. Z8 H' ?8 G' w" ~td.html(input);
9 D. ] W0 S* H" i1 d+ W//设置文本框的点击事件失效1 P1 D, \' j3 j, }
input.click(function() {4 u0 ?+ C+ i# f; y4 F- Z" Y# n
return false;3 n5 {/ T+ \- G3 o
});( G' s! z3 o: W. @: K2 Z6 k
//设置文本框的样式8 K/ l7 Z( M/ G, p
input.css(border-width, 0);/ t: f! i8 V# B; B5 h
input.css(font-size, 16px);
; H9 `% |+ z! f4 C% Oinput.css(text-align, center);5 d2 J. J. r& A
//设置文本框宽度等于td的宽度2 i* n( c: Y& z7 u' d V6 L" x
input.width(td.width());1 Y9 C: `% o$ }* d0 ~' N6 I
//当文本框得到焦点时触发全选事件
" c# [" \0 U4 [. d w# cinput.trigger(focus).trigger(select);
# k3 C4 d' q9 w( L, @7 J- @+ I//当文本框失去焦点时重新变为文本2 n0 Z; L9 u5 V, G
input.blur(function() {
5 b5 n1 Z% l: h! r$ q2 b! Mvar input_blur = $(this);
$ E \0 v" O& e% q; A. w9 c//保存当前文本框的内容- B9 o# y& U$ F
var newtext = input_blur.val();: q5 ^: G& h1 I) M" R2 z& [
td.html(newtext);
7 `/ v: s- n, S6 r! O});! A# h, G _5 J; F
//响应键盘事件
9 J0 U( J/ q9 x$ e9 binput.keyup(function(event) {7 a" R3 n' h4 ~7 N
// 获取键值
3 U; o5 s! G! ivar keyevent = event || window.event;
% U5 l& f- G2 m! i4 Hvar key = keyevent.keycode;
# {: r' }& B {1 S8 |+ l//获得当前对象
# }3 ?* h( _6 a) E. d2 x9 w7 g% hvar input_blur = $(this);
2 C: H: y& B2 D. a, gswitch (key)
7 U1 k; D' O% z+ x3 y2 n; X! G3 d' n4 h. j{* b4 ^* Y" b- n# ]4 Q4 q
case 13://按下回车键,保存当前文本框的内容7 s0 d* l! i4 V& P! D
var newtext = input_blur.val(); ~9 e8 ^, p c, J
td.html(newtext);. V4 l, z2 i) {! p* g4 D
break;
7 I& f4 W3 p6 d6 P4 e9 ycase 27://按下 esc键,取消修改,把文本框变成文本$ ^" }0 k" b0 Z6 R: A
td.html(oldtext);1 d4 j, E) d% e( S
break;
1 m1 x' \- ]3 t! H& L# D8 K}
+ d7 t4 `+ D7 i! }( \! T});- q$ N" ^ {4 R* O
});6 X( l+ F5 [! v1 d- t/ y6 Z8 f
});
/ y9 x# n7 `3 ^7 d, l4 K' x第二种单击表格可以编辑的方法; ?# R& s8 S& G# g' g- d
代码如下:. {. |' G, `! l$ F8 }1 j
$(document).ready(function(){
6 _7 q/ a; ` Z2 b9 F0 Jvar tds = $(td);0 s. g+ |: n% R8 s
tds.click(tdclick);. N5 l1 G1 C0 ]
});* t- h3 P' s8 @% A- A! d6 P
function tdclick(){
}5 @( x: G& n b0 H T& k$ Jvar tdnode = $(this);8 \! E% R# m( h8 v0 Q
var tdtext = tdnode.text();
+ [9 f$ k& g( D3 G9 Dtdnode.html();
% h# P8 U- s F2 a8 a4 E- _4 c/ s; Cvar input = $(<input>);* K' Q4 y+ i, H( t' m' }; I
input.val(tdtext); // input.attr(value,tdtext);
3 ~( @! P% M: ^8 w5 H: R) ninput.keyup(function(event){
' m, d% C) [' x- _9 y- bvar myevent = event || window.event;$ n+ @6 K# R7 j" b. i2 ~
var keycode = myevent.keycode;
; O9 P4 K" ?2 T. Y" pif(keycode == 13){
/ R3 m' n- f) f( i& Gvar inputnode = $(this);
# ^0 ?- @9 T% nvar inputtext = inputnode.val();0 X [& N/ H* T; Y8 z1 M$ m
var td = inputnode.parent();
f3 X5 Y; b- @: r t3 Itd.html(inputtext);
' U0 C% [8 E$ W8 }td.click(tdclick);' A2 Y7 z5 U6 f: z* D8 g/ c4 l
}, o; C; E( t: @
if(keycode == 27){ //判断是否按下esc键( Y+ {5 ]& @9 W
$(this).parent().html(tdtext);
5 }% T2 `6 u5 b# _- z* f$(this).parent().click(tdclick);5 {" ?" u1 @. x! W& n3 l, W
}% j6 ?3 o" b! O6 q. B" l
});( w& z; u A2 ?, `9 _' n' j; j
tdnode.append(input);
. V1 i; A4 ]9 J ?tdnode.children(input).trigger(select); V- h o& l( g% G/ Q8 T* ]
//输入框失去焦点,所执行的方法
( n9 ~" B$ |, iinput.blur(function(){
2 b# N, r0 C2 h; B9 Xtdnode.html($(this).val());& T" n, x8 |+ g# L; t2 y4 Q5 z! K
tdnode.click(tdclick);
6 p8 Y6 Q' R# v9 i2 d+ }});- x; S r- o& E3 _2 J! N
tdnode.unbind(click); {1 K" C' q; g4 S( b( l) v5 d
}
5 E! E) {- ?. Z4 P" s7 t* i想比较来说,个人更喜欢第二种一些,小伙伴们是什么意见呢,欢迎留言给我。
0 w7 w* p7 g$ M0 `) c0 i4 m6 G, M8 `' I Q. w8 E& ^$ M2 T
更多网页制作信息请查看: 网页制作 |
|