addEventListener与输入数组
addEventListener with an array of input
我需要使用addEventListener
来自动更新输入不同input text
(实际上是4个input
标签)的值
下面是HTML代码:
<td class="col-md-4">
<label for="lab1"><b>$'mathbf{M_{1}}$</b></label>
<input type="text" class="form-control input-sm" id="lab1" />
</td>
<td class="col-md-4">
<label for="lab2"><b>$'mathbf{M_{2}}$</b></label>
<input type="text" class="form-control input-sm" id="lab2" />
</td>
<td class="col-md-4">
<label for="lab3"><b>$'mathbf{M_{3}}$</b></label>
<input type="text" class="form-control input-sm" id="lab3" />
</td>
</tr>
<tr>
<td class="col-md-4">
<label for="lab4"><b>$'mathbf{'Theta_{1}}$</b></label>
<input type="text" class="form-control input-sm" id="lab4" />
</td>
我想在修改值时更新值,而不必在input
外单击。
我试图在main
中使用以下addModifyEvent
函数:
function addModifyEvent() {
var inputList = document.querySelectorAll('input.form-control');
for (var i=0; i<inputList.length; i++)
{
inputList[i].addEventListener('input', function()
{
console.log(inputList[i].value); });
}
}
但它不工作(我得到TypeError: inputList[i] is undefined
)。
我不知道我是否应该这样做:
inputList[i].addEventListener('inputList['+i+']',
或者其他封闭的东西而不是
inputList[i].addEventListener('input',
我想为每个input tag
添加一个eventlistener
。
谁能告诉我正确的语法?
谢谢
在示例中可以看到,我打印了2个控制台,一个用于输入,另一个用于i
所以你的问题是:
,当在侦听器函数中,您试图访问console.log(inputList[i].value);所以在那个时候你的i是4并且你的输入数组长度是0-3并且因为for循环我将因为inputList[4]是,所以你得到undefined数组中不存在
工作示例: http://jsfiddle.net/kevalbhatt18/gqce9htx/
<我>我>
var input = document.querySelectorAll('input');
console.log(input)
for(var i=0;i<input.length;i++){
input[i].addEventListener('input', function()
{
console.log(input)
console.log(i)
console.log('input changed to: ', this.value);
});
}
调试错误示例:http://jsfiddle.net/kevalbhatt18/gqce9htx/2/
事件处理程序的上下文是触发事件的输入元素。将inputList[i]
替换为this
:
console.log(this.value);
稍微修改一下使用this.value
的代码版本就可以了:
function addModifyEvent() {
var inputList = document.querySelectorAll('input.form-control');
for (var i = 0; i < inputList.length; i++) {
inputList[i].addEventListener('input', function () {
console.log(this.value);
});
}
}
演示:http://jsfiddle.net/jfriend00/9ny3wcxu/
你不能在事件处理程序中引用inputList[i]
,因为当事件处理程序被调用时(稍后)for
循环已经完成运行,所以i
点超过了inputList
HTMLCollection对象的末尾。
您可以通过使用this
作为指向引起事件的对象的指针来解决这个问题,因此this.value
是刚刚修改的input
字段的值。
事件触发时,
console.log(inputList[i].value);
inputList[i]
将无效,因为它是用于绑定事件侦听器的for
循环的一部分。
使用this
获取当前触发事件的元素,
console.log(this.value);
完整代码
function addModifyEvent() {
var inputList = document.querySelectorAll('input.form-control');
for (var i = 0; i < inputList.length; i++) {
inputList[i].addEventListener('input', function () {
console.log(this.value);
});
}
}
您可以使用闭包(如果不熟悉,请搜索并阅读一点)。代码如下:
for (var i=0; i<inputList.length;i++)
{
(function(i){
inputList[i].addEventListener('input',function(){
console.log(inputList[i].value); });
}
})(i);
}
基本上i的值在函数中保持不变。每当您在异步循环中执行某些操作时,都需要这样做。
这样做的好处是不需要改变访问值的方式,只是需要将它们封装在闭包函数中。
希望这能解决你的问题,而不需要改变访问数组的方式
var inputElem = document.getElementsByTagName('input');
for(var i = 0; i < inputElem.length; i++) {
inputElem[i].addEventListener('click', function(){
alert(this.value);
}, false);
}
- 将值输入到对象,然后该对象推送到数组
- 使用javascript搜索具有用户输入的数组
- 如何在用户输入时实例化数组
- 如何从客户端的数组中获取用户输入和返回值
- 数组在单个输入中返回
- ajax成功地将数组中的数据放入表中各自的输入中
- 数组输入不起作用
- 在 js 上获取数组输入的值
- 数组输入复选框上的“依赖”复选框
- 如何使用angularjs和PHP将数组输入值获取到数据库中
- 使用Javascript动态数组输入
- Javascript名称数组输入选择器(name[sometext])
- Vaildate动态添加数组输入-jQuery Validate
- 将PHP数组输入到Javascript数组/下拉列表中
- jQuery比较数组输入字段
- 如何使用proengsoft/ Laravel -jsvalidation和Laravel 5验证数组输入
- 如何在larvel5.0中使用数组输入的保存方法
- 如何验证数组输入angularjs
- 如何制作一个具有多维数组输入的函数,对其进行转换,并输出新的多维数组
- 通过jquery检查数组输入值中是否存在值