Javascript:不知道为什么这个解决方案有效

标签 javascript prompt

好的,我正在做一个学习 Javascript 的练习,我需要制作一个简单的数独应用程序。有一个创建数独字段的函数,每个小方 block 都在一个 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);
}

谁能给我解释一下?

最佳答案

我可能会建议你检查是否有元素相互重叠——这可能是连续三个提示的原因。

我猜其他同学写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 处的 + 将字符串解析为整数或 float 。

关于Javascript:不知道为什么这个解决方案有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16758169/

相关文章:

javascript - 动态创建的元素上的事件绑定(bind)?

javascript - 如何将我的日期转换为适合执行新 Date() 的格式?

javascript - 创建带有提示的网页

javascript提示 - 在默认文本中添加变量

javascript - gRaphael Js : where can I find tutorials to produce data charts (pie, 条等)

javascript - 如何在隐藏/显示跨度元素时保留固定宽度显示

perl - 无法在 Perl 中使用 qx 从提示行完成命令

zsh 提示 - 检查是否有任何后台作业

在 R Studio 的命令行中从 '+' 提示返回到 '>'

javascript - Dragtable Javascript 库并不适用于每个页面。仅在 Index.html 中导入库的地方?