是否有任何方法可以在javascript中等待输入中间暂停一个函数?

时间:2011-11-18 11:38:45

标签: javascript

我需要在中间暂停JavaScript函数执行,然后在单击表格单元格后恢复它。例如:我必须将'A'放入其中一个表格单元格中。所以,我必须单击add()(add()是一个函数),然后等待用户单击表格单元格以将单元格id传递给函数。我曾想过将click事件绑定到每个单元格以触发add()函数。但是我必须做一个删除功能。我点击删除按钮然后等待用户点击表格单元格以将单元格ID传递给该功能。

那么我怎么能暂停函数来等待输入就像C ++:cin>> x程序等待直到用户输入x的值。

编辑: 最后我解决了。每次当我点击添加按钮时,我都会将addtd函数绑定到每个td。点击单元格后,我取消绑定addtd函数。因此,下次单击删除按钮时,我可以在每个单元格上绑定一个deltd函数。

2 个答案:

答案 0 :(得分:1)

我完全不明白这个问题。您无法暂停执行(不会阻止整个浏览器)。您只能在完成工作的地方设置事件监听器。

您可以设置click事件委派,以避免将click事件侦听器绑定到每个单元格。

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;
});

答案 1 :(得分:1)

无法按照您描述的方式暂停功能。你有没有考虑过相反的方式呢?也就是说,当用户单击一个单元格时,您可以以某种方式突出显示它,然后添加和删除按钮/功能将应用于当前突出显示的单元格。

或者,您可以添加或删除“预处理”,然后设置某种标志以指示您正在等待输入,然后为单元格点击事件设置事件处理程序,以检查该标志以决定处理什么接下来。因此,假设您已设置添加和删除事件处理程序以调用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()的局部变量,即使直到稍后才会执行回调(闭包的魔力)。