【问题标题】:How to target all inputs on the page? [duplicate]如何定位页面上的所有输入? [复制]
【发布时间】:2016-01-03 04:30:40
【问题描述】:

我正在尝试定位页面上的所有输入 type="number",但只有第一个被触发。有谁知道我为什么以及如何定位所有输入元素?

我的 JS:

// Select your input element.
var numInput = document.querySelector('input');

// Listen for input event on numInput.
numInput.addEventListener('input', function(){
    // Let's match only digits.
    var num = this.value.match(/^\d+$/);
    if (num === null) {
        // If we have no match, value will be empty.
        this.value = "";
    }
}, false)

My jsFiddle

【问题讨论】:

  • 你为什么不试试jQuery?它的语法很短 $('input[type=number]')

标签: javascript jquery


【解决方案1】:

使用querySelectorAll 选择所有匹配选择器的元素。选择所有输入类型number元素。

var allNumberInputs = document.querySelectorAll('input[type="number"]');

Updated Fiddle

然后您需要更新在元素上绑定事件的代码。 循环遍历所有匹配的元素并将事件单独绑定到每个元素上。

// Select your input element.
var numInput = document.querySelectorAll('input[type="number"]');

for (var i = 0, len = numInput.length; i < len; i++) {
  // Listen for input event on numInput.
  numInput[i].addEventListener('input', function() {
    // Let's match only digits.
    var num = this.value.match(/^\d+$/);
    if (num === null) {
      // If we have no match, value will be empty.
      this.value = "";
    }
  }, false);
}
<label for="first">First</label>
<br>
<input type="number" min="0" />
<br>
<br>
<label for="Second">Second</label>
<br>
<input type="number" min="0" />

如果您的页面中包含 jQuery

$('input[type="number"]')

演示

$('input[type="number"]').on('input', function(e) {
  // Let's match only digits.
  var num = this.value.match(/^\d+$/);
  if (num === null) {
    // If we have no match, value will be empty.
    this.value = "";
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.0/jquery.min.js"></script>
<label for="first">First</label>
<br>
<input type="number" min="0" />
<br>
<br>
<label for="Second">Second</label>
<br>
<input type="number" min="0" />

我建议你使用 HTML5 模式 属性来只允许数值。

<input type="number" min="0" pattern="\d+" />

【讨论】:

  • 我忘记了循环事件,你是对的。谢谢!那行得通。我将此标记为正确,但是所有其他答案也应该有效,但您的答案对我来说更有意义。 =)
  • @brunodd 欢迎您!如果您已加载 jQuery,请使用 jQuery 方法,如答案中的第二个代码 sn-p,如果没有,则删除 jQuery 标记
  • &lt;input type="number" min="0" pattern="\d+" /&gt;。我不知道。谢谢
  • @SheraliTurdiyev 欢迎:)
【解决方案2】:

使用document.querySelectorAll() 代替document.querySelector()

querySelectorAll() 方法返回所有匹配的元素,而 querySelector() 方法只返回第一个,这就是你得到的。

【讨论】:

    【解决方案3】:

    querySelector 只返回一个元素:第一个匹配元素。

    您可以改用querySelectorAll。然后将事件监听器附加到返回的元素。

    如果您还想按类型过滤输入,请使用:

    var numInputs = document.querySelectorAll('input[type=number]');
    

    然后你可以像这样添加事件监听器:

    for (var i = 0; i < numInputs .length; i++) {
        numInputs[i].addEventListener("click", yourFunction, false);
    }
    

    现在,既然您使用的是 jQuery,不妨利用它:

    $('body').on('input', 'input[type=number]', yourFunction);
    

    这就是你所需要的。

    【讨论】:

      【解决方案4】:

      使用 jQuery 这很容易:

      $('input[type=number]')
      

      【讨论】:

        【解决方案5】:

        由于问题是 jQuery 标记的,您可以使用 attribute equals selector:

        选择具有指定属性和值的元素 完全等于某个值。

        代码:

        $('input[type="number"]').on('input',function(){
            // Let's match only digits.
            var num = this.value.match(/^\d+$/);
            if (num === null) {
                // If we have no match, value will be empty.
                this.value = "";
            }
        });
        

        演示:http://jsfiddle.net/IrvinDominin/31t2Lafw/

        如果可能倾向于避免使用新的或支持不佳的事件,例如inputhttps://developer.mozilla.org/en-US/docs/Web/Events/input

        【讨论】:

        • @Cerbrus 对我来说也是新的:developer.mozilla.org/en-US/docs/Web/Events/input 在这个问题中找到
        • 我建议不要使用那些支持不佳的功能。或者至少添加一个提及它的通知。
        • @Cerbrus 是的,我同意你的观点,但在 OP 代码中
        • 哦,你完全正确!我忽略了这一点。
        • @Cerbrus 没问题,像往常一样我在这里学到了另一件事:-)
        猜你喜欢
        • 2012-07-15
        • 2020-11-22
        • 2021-06-09
        • 1970-01-01
        • 2019-09-18
        • 2010-09-28
        • 1970-01-01
        • 1970-01-01
        • 2019-07-15
        相关资源
        最近更新 更多