我需要在中间暂停JavaScript函数执行,然后在单击表格单元格后恢复它。例如:我必须将'A'放入其中一个表格单元格中。所以,我必须单击add()(add()是一个函数),然后等待用户单击表格单元格以将单元格id传递给函数。我曾想过将click事件绑定到每个单元格以触发add()函数。但是我必须做一个删除功能。我点击删除按钮然后等待用户点击表格单元格以将单元格ID传递给该功能。
那么我怎么能暂停函数来等待输入就像C ++:cin>> x程序等待直到用户输入x的值。
编辑: 最后我解决了。每次当我点击添加按钮时,我都会将addtd函数绑定到每个td。点击单元格后,我取消绑定addtd函数。因此,下次单击删除按钮时,我可以在每个单元格上绑定一个deltd函数。
答案 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()
的局部变量,即使直到稍后才会执行回调(闭包的魔力)。