QuerySelectorAll不适用于onclick事件

顽固

设想

我有一些文本输入,我希望它们在单击时具有500px的宽度。

我的密码

var inputs = document.querySelectorAll("input[type=text]")
for(i=0; i<inputs.length; i++){
	inputs[i].onclick = function(){
		inputs[i].style.width = "500px";
	}
}
<input type="text" id="sometext">

什么不起作用

在chrome控制台上,我在以下行上收到“无法读取未定义的属性'style'of undefined”:inputs[i].style.width = "500px";当我单击输入时。

我的问题

如何修复我的代码?

乔什·克罗齐耶(Josh Crozier)

“无法读取未定义的属性'样式'”

您看到此错误的原因是,触发事件时,for循环已经结束并且iinputsNodeList的边界之外click换句话说,由于数组中最后一个元素的索引比长度小一个,inputs[i]因此未定义,因为i它等于click触发事件侦听器时NodeList的长度

要解决此问题,您可以更改inputs[i]this以访问单击的元素。这样做可以避免使用i(导致问题的原因):

var inputs = document.querySelectorAll("input[type=text]")
for (i = 0; i < inputs.length; i++) {
  inputs[i].addEventListener('click', function() {
    this.style.width = "500px";
  });
}

另外,您可以使用IIFE以便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);
}

您还可以使用该.bind()方法来传递的值i

var inputs = document.querySelectorAll("input[type=text]")
for (i = 0; i < inputs.length; i++) {
  inputs[i].addEventListener('click', function(i) {
    inputs[i].style.width = "500px";
  }.bind(this, i));
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

onclick事件不适用于选项

来自分类Dev

onClick事件不适用于Android

来自分类Dev

jQuery onclick事件不适用于td

来自分类Dev

href链接不适用于Safari中的onclick事件

来自分类Dev

onclick事件不适用于position:fixed

来自分类Dev

onclick事件不适用于多种功能

来自分类Dev

onclick事件不适用于替换的片段

来自分类Dev

Onclick事件不适用于提交类型按钮

来自分类Dev

HTML 5模式不适用于按钮的onclick事件

来自分类Dev

onclick事件不适用于svg元素

来自分类Dev

多个 OnClick 事件不适用于所有对象

来自分类Dev

preventDefault()不适用于更改事件

来自分类Dev

jQuery事件不适用于id

来自分类Dev

jQuery事件不适用于id

来自分类Dev

jQuery不适用于按钮事件

来自分类Dev

onclick不适用于按钮输入

来自分类Dev

ajaxStart 不适用于 onclick

来自分类Dev

onclick事件仅适用于按钮,不适用于与按钮一起使用的glyphicon

来自分类Dev

为左或右键单击附加事件侦听器-onclick不适用于右键单击

来自分类Dev

Android:onClick事件监听器不适用于linearlayout

来自分类Dev

按钮上的 onclick 事件不适用于 ajax 调用接收的块

来自分类Dev

函数不适用于 React.js 中的 onClick 事件

来自分类Dev

滚动功能适用于某些单击事件,但不适用于其他事件

来自分类Dev

document.addEventListener不适用于加载事件

来自分类Dev

Click事件不适用于动态添加的按钮

来自分类Dev

Appcelerator Facebook登录按钮事件不适用于Alloy

来自分类Dev

触摸事件不适用于Angular中的Google Maps

来自分类Dev

JS事件委托不适用于某些组件

来自分类Dev

事件侦听器不适用于锚点