在输入中输入文本时改变元素的颜色?
2023-07-28
177
我正在寻找一种方法来更改元素的样式(例如
<body>
),当在
<input>
中输入的不仅仅是文本,还有特定数字(如“5214”)或其他内容时。使用我当前的代码,会抛出 Uncaught TypeError:无法设置未定义的属性(设置“innerText”)。我该如何修复它?错误在第 3 行。我在 ADT 安全系统面板上看到了类似的内容,但使用的是
<input type="hidden">
。还使用了 4 个
<span>
元素。
HTML CSS JS
const inputField = document.getElementsByClassName("doSomething");
if(inputField[0].innerText = "5214") {
document.getElementsByTagName("body").style.backgroundColor = "lime";
}
input {
background-color: #ffffff;
}
<label>Numbers only:</label><input type="text" onkeypress="return (event.charCode !=8 && event.charCode ==0 || (event.charCode >= 48 && event.charCode <= 57))" />
<br>
<label>Numbers and decimal points only:</label>
<input type="text" onkeypress="return (event.charCode !=8 && event.charCode ==0 || ( event.charCode == 46 || (event.charCode >= 48 && event.charCode <= 57)))" />
2个回答
该代码中有许多问题需要解决。
-
在您的 HTML 中,输入标签未指定类名,但您说它们属于 javascript 中的
doSomething
类。因此,目前没有doSomething
类的元素,这就是document.getElementsByClassName("doSomething")
返回undefined
的原因。 -
当 if 语句中的条件为
inputField[0].innerText = "5214"
时,您没有比较两个值以检查它们是否相等。您正在分配。 错误的运算符。 为了进行比较,您需要使用==
。 -
此外,要获取输入元素内的文本,您不能使用
innerText
属性,因为它们不像文本元素那样工作。相反,您需要使用value
。 -
执行
document.getElementsByTagName("body")
将返回一个数组,而不是您拥有的唯一 body 元素,因为您可能拥有多个。因此,假设您只有一个 body 标签,您可以执行document.getElementsByTagName("body")[0]
。 -
您必须在
keyup
之后检查输入的值,而不是keypress
,因为该值在keypress
之前不会改变。它只在keyup
之前这样做。因此,您正在使用keypress
检查前一个值,而不是当前值。因此,您必须使用onkeyup
。 -
顺便说一句,当您说
document.getElementsByTagName("body")[0].style
时,只要您只有一个 body 标签(您应该这样做),您就应该说document.body.style
。显然,第二个比第一个更简单、更有意义。
这是最终有效的代码:
const inputField = document.getElementsByClassName("doSomething");
function check() {
if(inputField[0].value == "5214") {
document.body.style.backgroundColor = "lime";
} else {
document.body.style.backgroundColor = "white";
}
}
<label>Numbers only:</label>
<input class="doSomething" type="text" onkeyup="check()" onkeypress="return (event.charCode !=8 && event.charCode ==0 || (event.charCode >= 48 && event.charCode <= 57))"/>
<br>
<label>Numbers and decimal points only:</label>
<input class="doSomething" type="text" onkeyup="check()" onkeypress="return (event.charCode !=8 && event.charCode ==0 || ( event.charCode == 46 || (event.charCode >= 48 && event.charCode <= 57)))"/>
Amolgorithm
2023-07-28
首先,您的输入和主体选择器中缺少类 doSomething
document.getElementsByTagName("body").style.backgroundColor = "lime";
为其添加 [0] 索引,然后您的代码将成功运行...
如下面的代码所示。
Html 代码
<label>Numbers only:</label>
<input type="text" class="doSomething" onkeyup="changeColor()" />
<br>
<label>Numbers and decimal points only:</label>
<input type="text" class="doSomething" onkeyup="changeColor()" />
Javascript 代码
<script>
const inputField = document.getElementsByClassName("doSomething");
console.log(inputField[0])
let changeColor = () => {
if (inputField[0].value == "5214") {
let body = document.getElementsByTagName("body")[0];
body.style.backgroundColor = "lime";
}
}
</script>
Pravin Tidake
2023-07-28