Javascript 防止live table上载上的双重激活功能
我有一个带有contenteditable值的表,当我更改值时,ajax操作将更新DB的值。 问题在于,在警报继续出现后,单击一个框,然后立即单击另一个框,而无法执行任何其他操作。 一旦启动,是否有办法防止其他单击功能 代码JS:Javascript 防止live table上载上的双重激活功能,javascript,php,Javascript,Php,我有一个带有contenteditable值的表,当我更改值时,ajax操作将更新DB的值。 问题在于,在警报继续出现后,单击一个框,然后立即单击另一个框,而无法执行任何其他操作。 一旦启动,是否有办法防止其他单击功能 代码JS: function showEdit(editableObj) { $(editableObj).css("background", "#FFF"); } function saveToDatabase(editableObj, column, id) { v
function showEdit(editableObj) {
$(editableObj).css("background", "#FFF");
}
function saveToDatabase(editableObj, column, id) {
var isGood = confirm('Are you sure?');
if (isGood) {
$(editableObj).css("background", "#FFF url(./img/loaderIcon.gif) no-repeat right");
$.ajax({
url: "saveedit.php",
type: "POST",
data: 'column=' + column + '&editval=' + editableObj.innerHTML + '&id=' + id,
success: function(data) {
$(editableObj).css("background", "#FDFDFD");
}
});
// }
} else {
alert('Abort');
}
}
Php表格:
echo '<td contenteditable="true" onBlur="saveToDatabase(this, \'nameDB\', \''.$res2['valuefromDB'].'\')" onClick="showEdit(this);">' .$res2['valuefromDB'] .'</td>';
echo'.$res2['valuefromDB'].';
您可以使用标志来防止激活:
var saveEnabled = true; // Only let you save when this is true
function saveToDatabase(editableObj, column, id) {
if (!saveEnabled) return; // If saveEnabled is false do not continue
saveEnabled = false;
var isGood = confirm('Are you sure?');
if (isGood) {
$(editableObj).css("background", "#FFF url(./img/loaderIcon.gif) no-repeat right");
$.ajax({
url: "saveedit.php",
type: "POST",
data: 'column=' + column + '&editval=' + editableObj.innerHTML + '&id=' + id,
complete: function(data) { // Errors should be handled before this
$(editableObj).css("background", "#FDFDFD");
saveEnabled = true;
}
});
// }
} else {
alert('Abort');
saveEnabled = true;
}
}
我终于找到了解决方案,简单的第一步:
echo '<td contenteditable="false" //false and not true this time
我简单地将editable true仅添加到td I edit,这样,如果用户在另一个td中模糊,则不会触发警报。可以防止触发功能。请描述您的代码应该如何工作的完美场景。现在,每次移动焦点时,它都会打开
confirm
提示,对吗?现在,当我单击页面的空白部分时,确认警报将出现,确认后将上载到DB(所有工作正常)。但如果我按下另一个td手机确认被窃听并继续出现,而不可能取消或处理。@EmielZuurbier你有什么建议给我吗?每次用户单独移动焦点时,我都会确认函数是否正常工作,我建议您不要使用onblur
事件触发提示。而是创建一个按钮,手动触发提示并保存整个表。@EmielZuurbier是个好主意,但如果用户尝试更改所有行,我认为脚本将失败。onblur用于单独更改每一行。例如,当您单击警报继续显示时,“中止”按钮不起作用。但现在如果我按“继续工作”,中止?继续?我在原来的问题中没有看到这一点。是的,我指的是警报(警报的是/否结果),你能重新措辞吗?正如您在我的代码中看到的,当onblur更改(如单击表外)时,会出现一个确认或中止操作的警报。我第一篇文章中的问题是,当我点击另一个TD警报离开TD时,我无法继续或中止警报,否则,如果我点击“空白页”,所有工作都将完成。如果我单击另一个TD警报,则使用您的代码仅使用continue而不使用abort。
function showEdit(editableObj) {
editableObj.setAttribute("contenteditable", true);
editableObj.focus(); //focus directly when change contenteditable
}