JavaScript,如果输入类型范围条件

时间:2018-11-08 15:23:05

标签: javascript

我正在尝试弄清楚我的脚本出了什么问题。当输入达到1时,它应该显示警报,但不显示。但是如果我用(value === value)替换(value === 1),则每次我更改输入时都会显示警报。所以我知道问题出在语法“(value === 1)”。我尝试了一切。 5个小时不足以让我在互联网上找到解决方案,所以我希望有人告诉我语法或其他方面是否有误。感谢您的时间。

<input id="carrotate123" type="range" min="0" max="3" value="2" oninput="getInput(this.value)">

<script>
function getInput(value) {
    var rangeInput = document.getElementById("carrotate123").value;
    var value = rangeInput.value;
    if (value === 1) { 
        alert("First"); 
    }
  
}
</script>

2 个答案:

答案 0 :(得分:4)

===运算符表示严格相等-值和类型均相等。在您的情况下,valuestring(DOM元素的value属性通常返回string),而1显然是number。请考虑以下示例:

1 == 1 // true
1 == "1" // true
1 === 1 // true
1 === "1" // false

您应该考虑将===更改为==(执行自动类型强制),或将您的值与"1"(作为字符串)进行比较。

有关比较运算符之间差异的更多信息:Expressions and operators

答案 1 :(得分:1)

您在这里有两件事是错的。首先,您有一个额外呼叫value。最干净的解决方案是删除rangeInput分配中的一个。但是您也可以简单地使用该值,而完全跳过定义rangeInput

第二个问题涵盖在Szab的回答中。您需要更改将目标值与input元素提供的字符串进行比较的方式。将这些看起来像这样:

<input id="carrotate123" type="range" min="0" max="3" value="2" oninput="getInput(this.value)">

<script>
function getInput(value) {
    var rangeInput = document.getElementById("carrotate123");
    var value = rangeInput.value;
    // or replace the previous two lines with
    // var value = document.getElementById("carrotate123").value
    if (value == 1) { // or: if (value === '1')
        alert("First"); 
    }
  
}
</script>