我有一个div,当点击时,调用一个名为door()的onclick函数。出现提示,当用户输入提示时,它会消失。
我做了一个if语句说:如果变量(i)大于3(当用户在输入提示符后再次单击div时会发生这种情况),然后提醒用户在提示中输入的内容。
当用户重新点击div时,我的问题就来了。弹出的警告说提示的值是" undefined"而不是用户输入的内容。为什么呢?
以下是代码:
<!DOCTYPE html>
<html>
<head>
<style>
#mainWall{position: absolute; width: 98%; height: 98%; border: 3px solid brown; }
#door{position: absolute; left: 49%; width: 5%; height: 10px; background: green; bottom: 1%;}
#widthCorridor{position: absolute; width: 5%; height: 98%; left: 49%; background: red; bottom: 18px;}
#mainCorridor{position: absolute; width: 98%; height: 5%; left: 1%; background: red; bottom: 50%;}
</style>
</head>
<body>
<div id="mainWall"></div>
<div id="mainCorridor"></div>
<div id="widthCorridor"></div>
<div id="door" onclick="door()"></div>
<script type="text/javascript">
var i = 1;
function door() {
while (i == 1){
var door = prompt();
i++;
}
i++
if (i > 3) {
alert(door);
}
}
</script>
</body>
</html>
答案 0 :(得分:1)
让我们逐步完成代码。
第一次拨打door()
:
var i = 1;
是全局设置的,因此i
最初调用1
时的值door
function door() {
由于提升,变量door
实际上已在此声明。
while (i == 1){
此时,输入了while循环,因为i
的值为1
var door = prompt();
用户可以输入任何值,只要按“ok”,就会返回一个字符串值。如果他们按“取消”,则返回null
。
i++;
i
的值现在变为2
}
i++
i
的值现在变为3
if (i > 3) {
当3
不大于3
时,会跳过此if
块,并且函数结束。将作为此函数作用域的door
的值转储给垃圾收集器。
alert(door);
}
}
现在第二次拨打door()
function door() {
此处声明变量door
,同样是由于提升。声明带来的值为undefined
。
while (i == 1){
i
保留3
的值,因为它位于全局范围内,因此永远不会输入此循环。
var door = prompt();
i++;
}
i++
i
的值现在变为4
。
if (i > 3) {
4
大于3
,因此输入了if
语句的正文。
alert(door);
警告door
变量的值。它从未被初始化,因此它保留了声明中undefined
的值。
}
}
函数结束,垃圾收集器再次收集door
变量。
答案 1 :(得分:0)
您的提示正在保存您的价值。但是,你在while循环或if语句中有逻辑错误。
变量“i”将始终为2,因为当i!= 1时,while循环为false。
我建议你随时移动警报。 见例:
while (i < 4) {
var door = prompt();
alert(door);
i++;
}
或者你可以这样写:
function test() {
var i = 1;
var prompts = [];
while (i < 4) {
var door = prompt();
prompts.push(door);
i++;
}
for (var x = 0; x < prompts.length; x++)
{
alert(prompts[x]);
}
}
答案 2 :(得分:0)
而不是使用一段时间,为什么不是简单的if if like this https://jsfiddle.net/g3m2jftL/
$('img').load(function() {
var imageObj = $(this);
if (!(imageObj.width() == 1 && imageObj.height() == 1)) {
console.log('Image source changed');
}
});