Eric @ EricBess WebHome

胜不骄,败不馁,胸有激雷而面如平湖

Chinese (Simplified) flagItalian flagKorean flagPortuguese flagEnglish flagGerman flagFrench flagSpanish flagJapanese flagArabic flagRussian flagGreek flagDutch flagBulgarian flagCzech flagCroat flagDanish flagFinnish flagHindi flagPolish flagRumanian flagSwedish flagNorwegian flagCatalan flagFilipino flagHebrew flagIndonesian flagLatvian flagLithuanian flagSerbian flagSlovak flagSlovenian flagUkrainian flagVietnamese flag
By N2H

Jquery效果:实现“即点即改”

目标

一个用AJAX(或AHAH)技术设计的页面,访问者无需离开就可以在看到的(x)HTML 页面上编辑内容。

方案

点击需要编辑的文本,变幻出一个带有保存和取消按钮的textarea。修改的部分将通过AHAH传送至服务器端的一个PHP脚本文件,用来更新数据库(MySQL或普通文件)。

演示

AJAX式即点即改演示
在这第一个演示中,我使用了一个id为“editinplace”的div元素。当鼠标划过这里时,背景颜色将变成浅黄色。点击文本将启动一些DOM操作,div元素被一个textarea元素取代–内中包含原先的文本。
点击保存按钮将向服务器端的PHP脚本文件发送新的HTML内容,并重新输出收到的新文本内容(通过 $_POST)。
在真实应用环境下,你还应当添加一个安全性检测,然后才能更新数据库并返回更新后的页面内容,同事告知jQuery执行成功的信息。

但在这个例子中,所有的修改都是成功的,发送给PHP脚本的信息将原封不动的返回到jQuery代码,显示到一个普通的警告窗口里。

代码
?View Code JAVASCRIPT
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
$(document).ready(function(){
	setClickable();
});
 
function setClickable() {
	$('#editInPlace').click(function() {
		var textarea = '<div><textarea rows="10" cols="60">'+$(this).html()+'</textarea>';
		var button	 = '<div><input type="button" value="SAVE" class="saveButton" /> OR <input type="button" value="CANCEL" class="cancelButton" /></div></div>';
		var revert = $(this).html();
		$(this).after(textarea+button).remove();
		$('.saveButton').click(function(){saveChanges(this, false);});
		$('.cancelButton').click(function(){saveChanges(this, revert);});
	})
	.mouseover(function() {
		$(this).addClass("editable");
	})
	.mouseout(function() {
		$(this).removeClass("editable");
	});
};
 
function saveChanges(obj, cancel) {
	if(!cancel) {
		var t = $(obj).parent().siblings(0).val();
		$.post("test2.php",{
  		content: t
		},function(txt){
			alert( txt);
		});
	}else {
		var t = cancel;
	}
	if(t=='') t='(click to add text)';
	$(obj).parent().parent().after('<div id="editInPlace">'+t+'</div>').remove();
	setClickable();
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
body{
	font-family: arial, helvetica, sans-serif;
	font-size: small;
}
 
.editable, textarea{
	background-color: #ffffd3;
}
 
textarea{
	width: 95%;
	font-size: 100%;
}
 
img.progress{
	vertical-align: middle;
	padding: 0 10px;
}

Pages: 1 2

1 Star2 Stars3 Stars4 Stars5 Stars (1 votes, average: 5 out of 5)
Loading ... Loading ...
-欢迎为本文评级

相关日志

本文读者也关心以下内容:

  • N/A

07月 20th, 2008 作者: eric | Coding, 网站技术 | Trackback ? | 无评论| Email This Post Print This Post | 402 views

Add a Comment

Leave a reply

No Comments