文档中的目标输入字段和设置&如果输入字段有任何值,则删除类名

时间:2017-12-21 15:24:44

标签: arrays

我有一堆输入字段,如果输入字段有某些值,我只想在条件中设置TRUE名称。如果没有,请删除someClass名称。

我目前正在研究使用JavaScript操作表单和表单字段,这是我正在处理的代码。

someClass

当前代码执行它只在最后一个输入字段上执行的操作。我想到每次有新的循环时都会覆盖// 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 , '' ); } }); } 。 所以我想通过循环中的一些条件语句来定位当前元素。除了手动分配一些输入的属性外,我无法想到任何其他事情(我对此知之甚少)。

1 个答案:

答案 0 :(得分:2)

您遇到的问题是每个输入事件侦听器正在更新w / e元素,变量input在事件被触发时表示 ,因此仅更新那个元素。

所以时间表是这样的:

  1. 将事件侦听器添加到输入1 | input = input1
  2. 将事件侦听器添加到输入2 | input = input2
  3. 将事件监听器添加到输入3 | input = input3
  4. 所有3个事件监听器都将更改变量input所持有的元素,此时此变量仅为input3。

    1. 用户点击输入内部并输入
    2. 输入3的
    3. var input得到更新
    4. 正如Sean所指出的,您需要每个eventListener函数来更新触发该事件的特定元素。这里有3个选项:

      1. 使用此this关键字 https://jsfiddle.net/5gbnykme/1/

      2. 使用event.target作为参考 https://jsfiddle.net/5gbnykme/2/

      3. 使用包装函数在本地范围调整变量 https://jsfiddle.net/5gbnykme/3/

      4. TL; DR 确保在事件侦听器中调用的元素是触发事件的元素。