最近做了个项目,其中项目要求:点击表格后可直接编辑,回车或鼠标点击页面其他地方后编辑生效,按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
更多网页制作信息请查看: 网页制作 |
|