【问题标题】:querySelectorAll detecting value in inputquerySelectorAll 检测输入中的值
【发布时间】:2017-02-16 04:21:32
【问题描述】:

我有多个输入,我想根据用户是否在其中输入值来区分。

<input type="text" class="foo"> <br/>
<input type="text" class="foo" value = "D"> <br/>
//and so on.. 

<button onclick="calculate()">Hightlight</button>

我编写的代码仅适用于属性值,而不是在启动函数之前检测“手动”键入的值:

function calculate() {

  var allinputs = document.querySelectorAll('input[value][type="text"]:not([value=""])');
  var myLength = allinputs.length;

  for (var i = 0; i < myLength; ++i) {
    allinputs[i].style.backgroundColor = "lime";

  }
}

我只想检测用户在通过突出显示按钮提交内容时输入内容的输入。 有没有办法在纯 javascript 中做到这一点?

这是我的小提琴:https://jsfiddle.net/Lau1989/Lytwyn8s/

感谢您的帮助

【问题讨论】:

    标签: javascript input selectors-api


    【解决方案1】:

    无法使用 CSS 选择器选择空输入(请参阅 Matching an empty input box using CSS),但您可以通过在应用样式之前测试值的长度来达到您想要的效果:

    function calculate() {
      var allinputs = document.querySelectorAll('input[type="text"]');
      var myLength = allinputs.length;
      var input;
    
      for (var i = 0; i < myLength; ++i) {
        input = allinputs[i];
        if (input.value) {
            input.style.backgroundColor = "lime";
        }
      }
    }
    

    【讨论】:

    • 谢谢。当我在输入中输入诸如 之类的空白属性值时,您的解决方案有效,但当我在没有值属性的输入中输入某些内容时,它仍然不起作用。我可以为我的所有输入设置空白属性值,但我确信有更优雅的方法来做到这一点?再次感谢您的帮助
    • @Lau 答案已更新 - 从 querySelectoAll 中删除了 [value],以便它现在可以选择所有文本输入。
    【解决方案2】:

    你需要像这样检查值

    function calculate() {
      var allinputs = document.querySelectorAll('input[type="text"]');
      var myLength = allinputs.length;
    
      for (var i = 0; i < myLength; ++i) {
        if (allinputs[i].value == '') {
          allinputs[i].style.backgroundColor = "lime";
        }
      }
    }
    <input type="text" class="foo">
    <br/>
    <input type="text" class="foo" value="D">
    <br/>
    <input type="text" class="foo" value="G">
    
    <button onclick="calculate()">Hightlight</button>
    
    <br/>
    <br/>
    <div id="output"></div>

    另见JsFiddle link

    如果您想在用户填写输入并再次单击时删除石灰背景,您可以添加else 语句。

    function calculate() {
      var allinputs = document.querySelectorAll('input[type="text"]');
      var myLength = allinputs.length;
      for (var i = 0; i < myLength; ++i) {
        if (allinputs[i].value == '') {
          allinputs[i].style.backgroundColor = "lime";
        }else {
        	allinputs[i].style.backgroundColor = "white";
            //allinputs[i].removeAttribute("style") or that
        }
      }
    }
    <input type="text" class="foo">
    <br/>
    <input type="text" class="foo" value="D">
    <br/>
    <input type="text" class="foo" value="G">
    
    <button onclick="calculate()">Hightlight</button>
    
    <br/>
    <br/>
    <div id="output"></div>

    更新

    你需要那个

    function calculate() {
      var allinputs = document.querySelectorAll('input[type="text"]');
      var myLength = allinputs.length;
      for (var i = 0; i < myLength; ++i) {
        if (!allinputs[i].hasAttribute("value")) {
            if(allinputs[i].value !== '') {
          	allinputs[i].style.backgroundColor = "lime";
          }else {
            allinputs[i].removeAttribute("style");
          }
        }
      }
    }
    <input type="text" class="foo">
    <br/>
    <input type="text" class="foo" value="D">
    <br/>
    <input type="text" class="foo" value="G">
    
    <button onclick="calculate()">Hightlight</button>
    
    <br/>
    <br/>
    <div id="output"></div>

    【讨论】:

    • +1 为您提供帮助,虽然我不是要选择空输入,而是只选择没有值属性的用户输入内容的输入。
    猜你喜欢
    • 2017-11-09
    • 1970-01-01
    • 2018-02-07
    • 2018-06-13
    • 2022-12-28
    • 2020-08-28
    • 2016-08-10
    • 2013-07-22
    • 1970-01-01
    相关资源
    最近更新 更多