RELATEED CONSULTING
相關咨詢
選擇下列産品馬上(shàng)在線溝通(tōng)
服務時(shí)間(jiān):9:00-18:00
你(nǐ)可(kě)能遇到了下面的問題
關閉右側工具欄
可(kě)編輯的表格:jQuery+PHP實現實時(shí)編輯表格字段內(nèi)容
  • 作(zuò)者:admin
  • 發表時(shí)間(jiān):2013-07-02 14:17:21
  • 來(lái)源:未知

在本例中,我們會(huì)通(tōng)過jQuery實現單擊将一個(gè)文本信息變為(wèi)可(kě)編輯的表單,你(nǐ)可(kě)以對文本內(nèi)容進行(xíng)編輯,然後點擊“确定”按鈕,新的內(nèi)容将發送到後台PHP程序處理(lǐ),并保存到數(shù)據庫;當點擊“取消”按鈕,則頁面恢複到初始狀态。

查看演示DEMO 下載源碼

本例适用場(chǎng)景:當查看詳細資料,如用戶詳情信息,發現其中某幾個(gè)字段信息需要修改,可(kě)直接點擊該字段內(nèi)容進行(xíng)修改,節約了用戶時(shí)間(jiān),(傳統的做(zuò)法是進入一個(gè)編輯頁面,列出所有(yǒu)編輯的字段信息,即使你(nǐ)隻需要編輯其中一兩個(gè)字段內(nèi)容,然後點擊提交)提高(gāo)了WEB響應速度,從而提高(gāo)了前端用戶體(tǐ)驗。

本例依賴jquery庫,并基于jeditable插件,具有(yǒu)以下特點:

  • 實時(shí)編輯,後台實時(shí)響應,并即時(shí)完成局部刷新。
  • 可(kě)自定義輸入表單類型,目前jeditable提供text,select,textarea類型。
  • 響應鍵盤的回車(chē)和(hé)ESC鍵。
  • 插件機制(zhì),本例提供與jquery ui的datepicker日曆控件的整合。

下面我們來(lái)一步步講解實現過程。

XHTML

我們需要制(zhì)作(zuò)一個(gè)表格,如下:

客戶信息
姓名 李小(xiǎo)三 辦公電(diàn)話(huà) 021-12345678
稱謂 先生(shēng) 手機 13800138000
公司名稱 常豐集團 電(diàn)子郵箱 lrfbeyond@163.com
潛在客戶來(lái)源 公共關系 有(yǒu)限期 2011-11-30
職位 部門(mén)經理(lǐ) 網站(zhàn) www.helloweba.com
創建時(shí)間(jiān) 2010-11-04 21:11:59 修改時(shí)間(jiān) 2010-11-05 09:42:52
備注 備注信息

這是一個(gè)用戶信息的表格,從代碼中可(kě)以發現響應的字段信息的td都給了一個(gè)class和(hé)id屬性,并賦值。值得(de)一提的是表格中的td對應的id的值是和(hé)數(shù)據庫中的字段名稱一一對應的,這樣做(zuò)就是為(wèi)了在編輯時(shí)讓後台獲取相應的字段信息,後面的PHP代碼中會(huì)講到。

CSS

table{width:96%; margin:20px auto; border-collapse:collapse;}
table td{line-height:26px; padding:2px; padding-left:8px; border:1px solid #b6d6e6;}
.table_title{height:26px; line-height:26px; background:url(btn_bg.gif) repeat-x bottom;
 font-weight:bold; text-indent:.3em; outline:0;}
.table_label{background:#e8f5fe; text-align:right; }

CSS渲染了表格樣式,讓表格看起來(lái)更舒服點。

jQuery

提到jquery,一定要記住在頁面的之間(jiān)要引用jquery和(hé)jeditable插件


然後開(kāi)始調用插件。

$(function(){
	 $('.edit').editable('save.php', { 
		 width     :120,
		 height    :18,
		 //onblur    : 'ignore',
         cancel    : '取消',
         submit    : '确定',
         indicator : '',
         tooltip   : '單擊可(kě)以編輯...'
     });
});

jeditable插件提供了很(hěn)多(duō)屬性和(hé)方法的調用。可(kě)以設置寬度,高(gāo)度,按鈕的文本信息,提交時(shí)的加載圖片,鼠标滑上(shàng)的提示信息等等。save.php是編輯後的信息最終提交的後台程序的地址。現在看看是不是表格中的信息可(kě)以編輯了哦。

jeditable還(hái)提供了select,textarea類型的編輯,并提供插件api接口。

來(lái)看下拉選擇框select的處理(lǐ):

$('.edit_select').editable('save.php', { 
	loadurl   : 'json.php',
	type      : "select",
});

type指定的是select類型,select裏加載的數(shù)據來(lái)自json.php,json.php提供了下拉框所需的數(shù)據源。

$array['老客戶'] =  '老客戶';
$array['獨自開(kāi)發'] =  '獨自開(kāi)發';
$array['合作(zuò)夥伴'] =  '合作(zuò)夥伴';
$array['公共關系'] =  '公共關系';
$array['展覽會(huì)'] =  '展覽會(huì)';
print json_encode($array);

這些(xiē)數(shù)據是直接存在json.php文件裏的,當然你(nǐ)也可(kě)以通(tōng)過讀取數(shù)據庫信息,然後生(shēng)成json數(shù)據,關于如何生(shēng)成json數(shù)據,請(qǐng)查看PHP中JSON的應用。還(hái)有(yǒu)一種方法是直接在editable中指定data:

$('.edit_select').editable('save.php', { 
	data : " {'老客戶':'老客戶','獨自開(kāi)發':'獨自開(kāi)發','合作(zuò)夥伴':'合作(zuò)夥伴', '展覽會(huì)':'展覽會(huì)'}",
	type : "select",
});

不難發現,其實上(shàng)述代碼中的data就是一串json數(shù)據。

textarea類型就不再多(duō)數(shù),将type類型改為(wèi)textarea就可(kě)以了。PS:默認類型為(wèi)text。

當處理(lǐ)日期類型時(shí),我接入了一個(gè)jquery ui的datepicker日曆插件,當然别忘了要引入juqery ui插件和(hé)樣式:


接入jquery ui的datepicker日曆插件

$.editable.addInputType('datepicker', {
    element : function(settings, original) {
        var input = $('');
		input.attr("readonly","readonly");
        $(this).append(input);
        return(input);
    },
    plugin : function(settings, original) {
		var form = this;
		$("input",this).datepicker();
    }
});

調用的代碼直接指定type類型為(wèi)datepicker即可(kě)。

$(".datepicker").editable('save.php', { 
	width     : 120,
	type      : 'datepicker',
	onblur    : "ignore",
});

現在看看,表格中的“有(yǒu)限期”字段的日期是不是可(kě)以修改了。好了,還(hái)有(yǒu)其他更多(duō)的插件接入期待您的加入。

PHP

編輯好的字段信息會(huì)發送到後台程序save.php程序處理(lǐ)。save.php需要完成的工作(zuò)是:接收前端提交過來(lái)的字段信息數(shù)據,并進行(xíng)必要的過濾和(hé)驗證,然後更新數(shù)據表中相應的字段內(nèi)容,并返回結果。

include_once("connect.php"); //連接數(shù)據庫
$field=$_POST['id'];  //獲取前端提交的字段名
$val=$_POST['value']; //獲取前端提交的字段對應的內(nèi)容
$val = htmlspecialchars($val, ENT_QUOTES); //過濾處理(lǐ)內(nèi)容

$time=date("Y-m-d H:i:s"); //獲取系統當前時(shí)間(jiān)
if(empty($val)){
    echo "不能為(wèi)空(kōng)";
}else{
    //更新字段信息
	$query=mysql_query("update customer set $field='$val',modifiedtime='$time' where id=1");
	if($query){
	   echo $val;
	}else{
	   echo "數(shù)據出錯";	
	}
}

再回到開(kāi)始的HTML代碼,表格中顯示的字段內(nèi)容信息當然是從數(shù)據庫讀取來(lái)的,所以要用PHP讀取數(shù)據表,把內(nèi)容顯示出來(lái)就OK,詳細過程大(dà)家(jiā)自己寫一個(gè)吧(ba)。

如此,可(kě)編輯的表格就此收工。但(dàn)是還(hái)不能完工,關于對輸入信息的有(yǒu)效性的驗證問題我還(hái)在研究,後面的文章我會(huì)陸續附上(shàng),敬請(qǐng)關注,也期待各位朋友(yǒu)的加入。