0

我创建了一个基本程序,用户输入在提交时会变成警报。如果我在 if/else 语句中使用 false 而不是 true 作为第一个条件,我无法弄清楚为什么程序只能按预期工作。我确信这是非常基本的,但我没有找到任何相关的东西。经过长时间的搜索,我决定发布这个问题。任何答案将不胜感激。

的HTML:

<form id="greetingForm"> 
<input type="text" name="userInput" id="userInput"/>
<input type="submit" value="click" id="submit"/>
</form>

损坏的脚本:

function output(){
var input = document.getElementById('userInput').value;   

    if(input == true){
    alert(input);
    }else{
    alert('Say something!');
    }

}

function init(){
var greetingForm = document.getElementById('greetingForm');
greetingForm.onsubmit = output;
}

window.onload = init;

工作脚本:

function output(){
var input = document.getElementById('userInput').value;   

    if(input == false){
    alert('Say something!');
    }else{
    alert(input);
    }

}

function init(){
var greetingForm = document.getElementById('greetingForm');
greetingForm.onsubmit = output;
}

window.onload = init;
4

3 回答 3

4

变量 input 永远不会等于布尔值 true,因为它是一个字符串。尝试将其更改为:

function output(){
  var input = document.getElementById('userInput').value;
  if(input != ""){
    alert(input);
  }else{
    alert('Say something!');
  }
}
于 2013-08-17T14:46:42.270 回答
2

为了澄清ferd tomale的答案,这是一种“奇怪的”类型转换情况,其中对相等性的检查与检查相等性的true行为方式不同false

"" == false -> true
"a" == false -> false, but
"" == true -> false
"a" == true -> false

您可以切换到使用类型安全的比较运算符 ( ===, !==),它的行为更加可预测,但是您必须自己将值转换为正确的类型。或者你可以在使用==or时学习 JS 自动类型转换的怪癖!=

于 2013-08-17T14:55:27.017 回答
0

因为你的输入是一个字符串。并且 string == true 将是false

您可以设置断点来检查它们。

于 2013-08-17T14:57:08.053 回答