我正在尝试弄清楚我的脚本出了什么问题。当输入达到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>
答案 0 :(得分:4)
===
运算符表示严格相等-值和类型均相等。在您的情况下,value
是string
(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>