我有一些文字输入,我希望它们在点击时宽度为500像素。
lockFocus
var inputs = document.querySelectorAll("input[type=text]")
for(i=0; i<inputs.length; i++){
inputs[i].onclick = function(){
inputs[i].style.width = "500px";
}
}
在Chrome控制台上,当我点击输入时,我在下一行:“<input type="text" id="sometext">
收到”无法读取未定义的属性'样式。
如何修复我的代码?
答案 0 :(得分:7)
&#34;无法读取属性&#39; style&#39;未定义&#34;
您看到此错误的原因是std::cout <<
循环已经结束,for
在i
NodeList的范围之外inputs
事件被触发了。换句话说,由于数组中的最后一个元素的索引比长度小1,因此click
未定义,因为inputs[i]
等于{{1}时的NodeList的长度事件监听器被触发。
要解决此问题,您可以将i
更改为click
,以便访问点击的元素。这样做,您可以避免使用inputs[i]
(导致问题的原因):
this
或者,您可以使用IIFE在每次迭代时传递i
的值:
var inputs = document.querySelectorAll("input[type=text]")
for (i = 0; i < inputs.length; i++) {
inputs[i].addEventListener('click', function() {
this.style.width = "500px";
});
}
您还可以使用.bind()
method传递i
:
var inputs = document.querySelectorAll("input[type=text]")
for (i = 0; i < inputs.length; i++) {
(function(i) {
inputs[i].addEventListener('click', function() {
inputs[i].style.width = "500px";
});
})(i);
}