Javascript 防止live table上载上的双重激活功能

Javascript 防止live table上载上的双重激活功能,javascript,php,Javascript,Php,我有一个带有contenteditable值的表,当我更改值时,ajax操作将更新DB的值。 问题在于,在警报继续出现后,单击一个框,然后立即单击另一个框,而无法执行任何其他操作。 一旦启动,是否有办法防止其他单击功能 代码JS: function showEdit(editableObj) { $(editableObj).css("background", "#FFF"); } function saveToDatabase(editableObj, column, id) { v

我有一个带有contenteditable值的表,当我更改值时,ajax操作将更新DB的值。 问题在于,在警报继续出现后,单击一个框,然后立即单击另一个框,而无法执行任何其他操作。 一旦启动,是否有办法防止其他单击功能

代码JS:

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
}