我有一個小問題,我試圖用jQuery創建一個內聯編輯系統。所以當用戶點擊一個表格字段時,innerhtml將會隨着表格字段的內容而變成一個輸入字段。 Onblur這個輸入字段保存在一個mysql數據庫中,innerhtml變回新的內容。我希望用戶多次編輯相同的文本。如果我使用.live('click',function(){});
每次用戶單擊表格字段時都會添加輸入,因此我得到的輸入將由輸入替換爲最後一個輸入的值。非常討厭,我使用.one
函數解決了這個問題,但現在用戶只能編輯每個表格一次!在ajax調用完成之前是否有辦法禁用直播活動?ajax完成後重置一個函數
jQuery的
$(document).ready(function(){
var id = 0;
$('table.editable td').one('click', function(event) {
var content = $(this).html();
id = $(this).parent().find('.id').val();
var class = $(this).attr('class');
$(this).html('<input type="text" id="editablefield" name="'+class+'" value="'+content+'"/>');
$(this).unbind(event);
});
$('#editablefield').live('blur', function() {
var value = $(this).val();
var name = $(this).attr('name');
$.ajax({
type: "POST",
url: "modules/Events/ajax/saveField.php",
data: "id="+id+"&val="+value+"&type="+name,
success: function(data) {
var data = data;
alert(data);
},
error: function(request, status, error) {
alert(request.responseText);
}
});
$(this).parent().html(value);
});
});
前端
<?php
$query = "SELECT * FROM mod_events";
$result = mysql_query($query) or die(mysql_error());
echo "<table class='editable'>";
echo "<tr>";
echo "<th></th>";
echo "<th>Event</th>";
echo "<th></th>";
echo "<th></th>";
echo "<th></th>";
echo "<th>Capacity</th>";
echo "</tr>";
while($row = mysql_fetch_assoc($result)) {
echo ("<tr>");
echo ("<td>");
echo ("<input type='hidden' value='".$row['event_id']."' class='id'>");
echo ("</td>");
echo ("<td colspan='4' class='event_name'>");
echo ($row['event_name']);
echo ("</td>");
echo ("<td class='event_capacity'>");
echo ($row['event_capacity']);
echo ("</td>");
echo ("</tr>");
}
echo "</table>";
?>
及AJAX腳本
<?php
require_once('../../../../config.php');
require_once("../../../../inc/dbconnect.php");
$id = mysql_real_escape_string($_POST['id']);
$value = mysql_real_escape_string($_POST['val']);
$field = mysql_real_escape_string($_POST['type']);
$query = "UPDATE mod_events SET ".$field." = '".$value."' WHERE event_id = ".$id;
echo mysql_query($query);
?>
希望你們能幫助我了!
不應該有更好的解決方案,只有在用戶點擊提交按鈕或類似的東西后才發送表單嗎?這樣做可能會產生很多*網絡流量 – 2010-09-03 08:51:54
爲真,只有下一步是禁用所有字段,直到ajax完成,所以只執行一個ajax調用。 – Tim 2010-09-03 09:03:30