【发布时间】:2017-12-21 15:24:44
【问题描述】:
我有一堆输入字段,我想在其中设置一个someClass 名称,前提是输入字段具有某些值。如果没有,请删除 someClass 名称。
我目前正在研究使用 JavaScript 操作表单和表单字段,这是我正在编写的代码。
// Add a class to an element, without removing/affecting existing values
var inputs = document.getElementsByTagName('input');
for (var i = 0; i < inputs.length; i++) {
// Set HTML elements collection index?
var input = inputs[i];
input.addEventListener('input', function() {
if (input.value.length > 0 && !input.className.match(/(?:^|\s)someClass(?!\S)/)) {
console.log("Input has some value");
input.className += "someClass";
}
if (input.value.length == 0) {
console.log("Input is empty");
input.className = input.className.replace( /(?:^|\s)someClass(?!\S)/g , '' );
}
});
}
当前代码仅在最后一个输入字段上执行它应该执行的操作。我突然想到,每次有新循环时,var input 都会被覆盖。
所以我想通过循环中的一些条件语句来定位当前元素。除了手动分配输入的一些属性之外,我想不出其他任何东西(我对此知之甚少)。
【问题讨论】:
-
我相信您应该能够在事件侦听器中使用“this”来引用触发事件的元素,这有帮助吗?
-
@SeanBurton,关于关键字
this有很多值得学习的地方。通常我在这种情况下理解this,但我必须从根本上理解thisJS 关键字。 (感谢您的评论肖恩!)
标签: arrays