有没有方法在中间暂停函数,等待JavaScript中的输入?

有没有方法在中间暂停函数,等待JavaScript中的输入?,javascript,Javascript,我需要暂停中间的JavaScript函数执行,然后在单击表单元之后再执行它。例如:我必须将“A”放入一个表格单元格中。因此,我必须单击add()(add()是一个函数),然后等待用户单击表单元格以将单元格id传递给函数。我曾想过将一个click事件绑定到每个单元格以触发add()函数。但是我还要做一个删除函数。这与我单击delete按钮,然后等待用户单击table单元格,将单元格id传递给函数是一样的 P>所以,如何暂停函数等待输入,就像C++:CIN > X,程序等待用户输入x.< /p>的

我需要暂停中间的JavaScript函数执行,然后在单击表单元之后再执行它。例如:我必须将“A”放入一个表格单元格中。因此,我必须单击add()(add()是一个函数),然后等待用户单击表单元格以将单元格id传递给函数。我曾想过将一个click事件绑定到每个单元格以触发add()函数。但是我还要做一个删除函数。这与我单击delete按钮,然后等待用户单击table单元格,将单元格id传递给函数是一样的

<> P>所以,如何暂停函数等待输入,就像C++:CIN > X,程序等待用户输入x.< /p>的值。 编辑:
我终于解决了。每次单击add按钮时,我都会将addtd函数绑定到每个td。单击单元格后,我解除了addtd函数的绑定。因此,下次单击delete按钮时,我可以在每个单元格上绑定一个deltd函数。

我不完全理解这个问题。不能暂停执行(如果不阻止整个浏览器)。只能在完成工作的位置设置事件侦听器

var textToAdd = 'A';

table.addEventListener('click', function (e) {
  var td = e.target;
  while (td !== this && td.tagName !== 'TD') { td = td.parentNode; }
  if (td.tagName !== 'TD') return;

  td.innerHTML += textToAdd;
});
您可以设置
单击
事件委派,以避免将
单击
事件侦听器绑定到每个单元格

var textToAdd = 'A';

table.addEventListener('click', function (e) {
  var td = e.target;
  while (td !== this && td.tagName !== 'TD') { td = td.parentNode; }
  if (td.tagName !== 'TD') return;

  td.innerHTML += textToAdd;
});

没有办法按照您描述的方式暂停函数。你有没有想过换一种方式?也就是说,当用户单击某个单元格时,您可以以某种方式将其高亮显示,然后添加和删除按钮/功能将应用于当前高亮显示的单元格

或者,您可以添加或删除“预处理”,然后设置某种标志以指示您正在等待输入,然后为单元格单击事件设置一个事件处理程序,检查该标志以决定下一步的处理。因此,假设您已将添加和删除事件处理程序设置为调用
Add()
Delete()
,并将表单元格单击处理程序设置为调用
cellClick()
,您可以尝试以下操作:

var clickCallback = null;

function add() {
   // do your preprocessing here
   clickCallback = function(clickedCell) {
      // do further processing here
   };
}

function delete() {
   // do your delete preprocessing here
   clickCallback = function(clickedCell) {
       // do further processing here
   };
}

function cellClick(e) {
    e = e || window.event;
    var clickedElement = e.srcElement || e.target;
    if (clickCallback != null) {
       clickCallback(clickedElement);
       clickCallback = null;
    }
}
处理完单击后,回调被设置回null,这样多次单击就不会做任何事情。显然,如果用户采取的其他操作应该取消其余的处理,那么也只需将回调设置回null即可


请注意,通过直接在
add()
delete()
函数中定义回调,它们(回调)将可以访问
add()
delete()
的局部变量,即使回调直到稍后才执行(闭包的魔力)。

是否要从用户处获取输入?提示可以这样做,它将提示用户并等待用户提供答案。“队列”状态更改数据,因此
currentValueToAdd=“A”然后在单击处理程序中读取并对其执行操作?可能重复的