最近做了个项目,其中项目要求:点击表格后可直接编辑,回车或鼠标点击页面其他地方后编辑生效,按esc可取消编辑
) S9 ^& P1 L# D% }7 x( z* [" O2个小伙伴给出了2中解决方案,大家来看看哪种更合适呢?+ \; J* a- I. P1 p" R
第一种单击表格可以编辑的方法
- A7 q8 V: X% o3 s代码如下:
( z0 n. J; H, K! ~) t//相当于在页面中的 body标签加上onload事件' |8 r& S& |) U. U2 F
$(function() {( x5 j+ T& ~9 M u1 R9 l% d" K- L8 _
//找到所有的td节点! e- @7 E! e1 [* Q3 B
var tds = $(td);* L9 X7 M' e9 J% U6 M; Q
//给所有的td添加点击事件% \$ f6 f0 {8 n9 _: z; c
tds.click(function() {
) y0 r+ V9 S& e: t8 [//获得当前点击的对象
% W* E7 A# X2 G* n) W7 ~var td = $(this);" m" D/ ?6 L1 U c5 q4 S c
//取出当前td的文本内容保存起来2 F! E# o, U5 ]7 g! M. b9 C
var oldtext = td.text();. D- z, _: G. j0 H, Y
//建立一个文本框,设置文本框的值为保存的值
; q2 ^7 G, H( d. z/ @0 @& gvar input = $(<input type='text' value=' + oldtext + '/>);
/ p$ M d9 O1 g k0 v# \//将当前td对象内容设置为input
1 p8 }7 d( h0 D. ^+ @4 v' F* g1 O. Vtd.html(input);
; m& ~) _1 ~1 x, A//设置文本框的点击事件失效
6 A" K7 Q% x0 r3 h3 b( n& x# Iinput.click(function() {
1 _ ?/ s8 C g) breturn false;$ w7 C7 S( F; J2 a% P
});
% |* } d, i5 r$ i5 N6 h, T//设置文本框的样式* m; V9 f( o- ?/ b% c
input.css(border-width, 0);1 ~ C. I- P4 n7 s
input.css(font-size, 16px);
2 M; m9 j# a3 c+ o, Pinput.css(text-align, center);1 G; M3 d: j2 q$ y9 ?; I
//设置文本框宽度等于td的宽度
8 Y" q" {5 M+ J- o# Z2 J- vinput.width(td.width());. O9 K& J0 p0 ^: \* d6 t& w" Q0 O
//当文本框得到焦点时触发全选事件
: {& C& E. W% e# {/ A" Z6 Sinput.trigger(focus).trigger(select);
) Q$ y* |# T: e$ _//当文本框失去焦点时重新变为文本
. s1 T6 w7 P9 B0 ninput.blur(function() {
/ `/ r: [1 m8 I6 N, }/ Gvar input_blur = $(this);1 h9 ?. f1 E7 o3 v& p+ L* j- X. Q6 W
//保存当前文本框的内容
3 M1 q% H4 J+ s1 L% Q! R) B! A8 ]var newtext = input_blur.val();+ |) U, q& ], U. x! R% G# z0 j
td.html(newtext);0 |% V+ g2 L) s* g4 J$ C- N
});- J& i$ a( M- C2 f: Y; U% w. Z) D
//响应键盘事件
+ T! D3 ^ s7 `9 M8 ainput.keyup(function(event) {
4 ] Y/ c. W( ^3 [1 p3 h( E// 获取键值
- Y# o; K; P' l- q/ J7 ivar keyevent = event || window.event;; l; p$ E5 _+ f1 u: H
var key = keyevent.keycode;
: l) h: {5 g6 K* v& o//获得当前对象" {" _+ M+ W' ^ G% ~
var input_blur = $(this);- _% _3 }7 a- X2 u0 R" ^
switch (key)0 \) r J6 ~# {% f( @6 ] X( Z/ h
{
% I8 _& h* F, F/ G- i7 Tcase 13://按下回车键,保存当前文本框的内容- |) V8 b$ {5 I$ o
var newtext = input_blur.val();3 e E9 d/ v5 c! X: F
td.html(newtext);
. C: Q" D* e. Mbreak;, L6 [* C. j ]0 O/ Q
case 27://按下 esc键,取消修改,把文本框变成文本
" h+ H9 Z* i! v. N7 N3 t1 d' |, ctd.html(oldtext);
9 F7 _2 d8 Q/ dbreak; [0 S( T; l& ~* G3 Y
}/ {9 ^/ E) d/ w2 U# M7 d
});
4 Q; V2 @* \4 T |3 T});* ^; F, f' n! F6 a n
});6 n2 c, Q# |, O; h8 E; ]
第二种单击表格可以编辑的方法1 {) A) b# |, N. J2 J$ y
代码如下:! N% u4 ?+ x. u/ H
$(document).ready(function(){, G: l; K' g. l6 |1 }7 D
var tds = $(td);
' n2 j. Z3 T8 _tds.click(tdclick);8 M! Z4 R! N4 k1 M6 g9 H8 B( l
});8 F! f: {) G( \: H" l
function tdclick(){
! j7 X: e: Z# ]9 ]) Dvar tdnode = $(this);( P* z6 K/ @! n# J$ Z: l5 z a
var tdtext = tdnode.text();
7 U) n& p; i( w1 Ytdnode.html();# X" p! C' X, @" \! t) q6 @+ K
var input = $(<input>);6 v+ _* v5 @7 B3 s/ k
input.val(tdtext); // input.attr(value,tdtext);
) j, X7 a# E, ~0 u. kinput.keyup(function(event){
. p; G( V& z+ g3 e1 }/ Uvar myevent = event || window.event;
: ]: w7 m ?/ o/ u% uvar keycode = myevent.keycode;
* M: b- o" p% _) r) wif(keycode == 13){, C4 Z ~! p, h8 p' o! J, p$ A
var inputnode = $(this);
* L4 d% w/ P6 l. g" s3 yvar inputtext = inputnode.val();; a, \+ B& @- m' [
var td = inputnode.parent();
! @/ p" I1 w) `" ~, h, N" H& q$ A: o' Ftd.html(inputtext);0 r6 L3 w. m$ f" U: E8 o: k
td.click(tdclick);8 f. k6 c0 y, ?3 M7 Y2 @
}' R* Q J3 _* i( ?4 Y3 ?- ^
if(keycode == 27){ //判断是否按下esc键
/ w w6 k- V4 d+ _1 \$(this).parent().html(tdtext);1 X! [7 X" A" Q% I% ]- m. C
$(this).parent().click(tdclick);0 W8 K& W, e7 v- Z: }4 Y/ j9 @/ o
}
# ? B! L! m& v' i1 v0 a});) H5 d3 Q! l! {0 j* D. a' |3 ^
tdnode.append(input);
+ X2 W: F& D! i5 {* Otdnode.children(input).trigger(select);8 ?. D( y& }6 U( x$ f4 B- h J
//输入框失去焦点,所执行的方法. ?1 O; F7 D3 I
input.blur(function(){
# {/ h9 `8 q" c; \tdnode.html($(this).val());
- }3 `6 d2 [! C8 b8 u0 ]/ E& i) Jtdnode.click(tdclick);
b$ f( I. g( u, s% K});
9 B0 o+ Y& _- S$ ~, `& `tdnode.unbind(click);
$ N: L; ^( E9 Z. R9 M: o}2 }; C, v! t! w& t* _
想比较来说,个人更喜欢第二种一些,小伙伴们是什么意见呢,欢迎留言给我。1 B) C$ _4 n1 \% M" T. t/ X! v
+ J6 @) a; d+ J; a2 L: H更多网页制作信息请查看: 网页制作 |
|