每当我点击某个字母时,我都希望从开头的第一个广告位value
更改为我点击的字母value
。我将letter.onclick = letterClick(this);
置于for
循环中还是应该以其他方式实现它是正确的。另外,letterClick()
函数应该包含什么?
// Makes slots and letters for the chosen word.
function maker() {
for (i=0; i<word.length; i++) {
var slot = document.createElement("input");
var letter = document.createElement("input");
var letters=(shuffledWord).split("");
slot.type = "submit";
slot.value = "";
slot.id = "slot" + i;
slot.setAttribute('id', 'slot');
letter.type = "submit";
letter.value = letters[i];
letter.id = "letter" + i;
letter.onclick = letterClick(this);
letter.setAttribute('id', 'letter');
document.getElementById("slotbar").appendChild(slot);
document.getElementById("letterbar").appendChild(letter);
}
}
答案 0 :(得分:3)
实际上,this
是指运行方法maker
的上下文。因此,大多数情况下,您将此视为窗口,并且在绑定onClick的处理程序时不希望调用该函数。它应该是一个功能参考。
尝试
letter.onclick = letterClick.bind(this, letter);
现在,将使用您的第一个参数作为该字母元素调用该函数。
当你这样做时
letter.onclick = letterClick(this);
它立即调用该函数并将其结果设置为处理程序,即如果它不返回另一个函数ref,它是真正的处理程序,它将无法工作。