我有以下代码,问题是,如果在setTimeout()结束之前右键单击并在页面上的其他元素上选择“复制”,则先前单击的元素将不会更改其样式,因为全局变量为分配了新的元素值。

如何修改此设置,以便setTimeout()完成被调用元素的任务?

var whichNode;
var contextMenu = new gui.Menu()

contextMenu.append(new gui.MenuItem({
    label: 'Copy',
    click: function() {
        whichNode.style.color = '#40c4ff'
        setTimeout(function(){ whichNode.style.color = 'inherit' }, 1000)
    }
}))

document.addEventListener('contextmenu', function(e) {
    e.preventDefault;
    whichNode = e.srcElement;
    contextMenu.popup(e.x, e.y)
})

最佳答案

您应该只维护对哪个Node的引用的副本。
可能正在做:

contextMenu.append(new gui.MenuItem({
label: 'Copy',
click: function() {
  var nodeCopy = whichNode;
  nodeCopy.style.color = '#40c4ff'
  setTimeout(function(){ nodeCopy.style.color = 'inherit' }, 1000)
}
}))

足够。

09-25 17:37
查看更多