好的,我正在练习学习Javascript,我需要制作一个简单的数独应用程序。有一个创建Sudoku字段的函数,每个小方块都在div中,id用于标识行号和列号。
现在的想法是,如果用户点击打开的字段,则会出现一个提示,要求他/她输入一个数字。如果数字介于1和9之间,则该数字将显示在字段内。
我首先调用了这样的函数:
node.onclick=function(){fillNumber(this.id);};
每当执行点击时,使提示框连续三次出现会产生意想不到的副作用。然而,很明显,用户的第一个输入被接受,存储并添加到div中,就像它应该的那样。第二个和第三个提示框的输入完全丢失。
我使用以下调用解决了这个问题:
node.onclick=function(){if (parseInt(this.id) > 0) fillNumber(this.id);};
然而我不知道为什么会这样(这是从一个以这种方式做过的同学复制的,但不知道为什么)。 this.id
的值总是这样:“11”,“12”,“13”,“21”,“22”,......所以我甚至没有看到首先解析它的重点到int或检查它是否大于0.就我所见,它总是一个int并且大于0。无论如何,方法本身的代码没有改变,并且使用完全相同的参数值调用该方法。
这是方法fillNumber:
function fillNumber(id){
var input = -1;
do{
input = parseInt(prompt("Enter a number between 1 and 9: ", ""));
}while(input < 1 || input > 10);
var i = parseInt(id/10), j = id%10;
numbers[i][j] = input;
var tekst = document.createTextNode(numbers[i][j]);
document.getElementById(tekst).appendChild(tekst);
}
任何人都可以向我解释这个吗?
答案 0 :(得分:1)
我可能会建议您检查是否有相互之间的元素 - 这可能是连续三次提示的原因。
我猜其他学生写parseInt(this.id)
的原因是一样的。
他试图将id
解析为int
以逃避其他点击元素,因此他确保该ID是有效数字。
尝试使用下一行:
node.onclick=function(e){
if( e.stopPropagation ) e.stopPropagation();
if( e.preventDefault ) e.preventDefault();
else e.returValue = false;
fillNumber(+this.id);
}
注意+
+this.id
将字符串解析为整数或浮点数。