我有一个小问题,我试图用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