【问题标题】:Jquery array of input IDs detect change输入 ID 的 Jquery 数组检测更改
【发布时间】:2015-07-19 07:47:34
【问题描述】:

我有一个关于检测输入 ID 数组中的输入是否发生变化的问题。

例如,我有一个输入 ID 数组:var arrayOfInputs = ['#firstname', '#lastname', '#email', '#phone'];

我的问题是我想检测这些字段中的任何输入更改,但我不想分别为每个输入字段编写庞大的脚本代码。

所以问题是:有没有办法用 jQuery 用一两行代码检测数组中所有这些输入的输入变化?

也许我应该使用 ID 数组以外的东西?

【问题讨论】:

  • 我不想为每个输入字段分别编写庞大的脚本代码。你听说过for 循环吗?
  • 但它是否检测到这些字段之一的输入更改?

标签: javascript jquery arrays input detect


【解决方案1】:

所以问题是:有没有办法用 jQuery 用一两行代码检测数组中所有这些输入的输入变化?

是的:

$(arrayOfInputs.join(",")).on("change", function() {
    // Here, `this` will refer to the input that changed
});

现场演示

var arrayOfInputs = ['#firstname', '#lastname', '#email', '#phone'];
$(arrayOfInputs.join(",")).on("change", function() {
  snippet.log(this.id + " changed");
});
<div><input type="text" id="firstname"></div>
<div><input type="text" id="lastname"></div>
<div><input type="text" id="email"></div>
<div><input type="text" id="phone"></div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>

也许我应该使用 ID 数组以外的东西?

是的,给他们一个通用类或data-* 属性或其他东西,而不是列出 ID。

现场演示

$(".watch-me").on("change", function() {
  snippet.log(this.id + " changed");
});
<div><input type="text" class="watch-me" id="firstname"></div>
<div><input type="text" class="watch-me" id="lastname"></div>
<div><input type="text" class="watch-me" id="email"></div>
<div><input type="text" class="watch-me" id="phone"></div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>

【讨论】:

  • 恕我直言-这仅在输入失去焦点时才有效。不在打字阶段。 (就像 ng 一样)。但我喜欢分裂的想法
  • @RoyiNamir:对,change 就是这样工作的。如需更主动的通知,有inputkeydownkeypresspaste、...
  • 相关,你会在这里使用 keydown/keyup 还是 keypress ? (我知道按键是用于视觉字符....)但是,您在这里的方法是什么?
  • @RoyiNamir:这完全取决于我想做什么回应。
  • 我是认真的。您的代码更短/动态。然而,更冗长的代码已被接受....
【解决方案2】:

您可以使用 each() 在排序代码中执行此操作。

var arrayOfInputs = ['#firstname', '#lastname', '#email', '#phone'];
$.each(arrayOfInputs, function(index, data){
  $(data).on('change',function(){
     alert($(this).val());
  });
});

【讨论】:

  • 不,这里不需要each
  • 如果你想对不同的输入进行不同类型的检查,那么你需要使用我认为的每一个
  • 不,如果你想对每个输入进行不同的检查,你不想each,你想连接单独的处理程序。
  • ty,这很好用。另外,我将“更改”更改为“输入”,这对我来说会更好。谢谢。
  • @Mac444s:你明白上面的循环是没有意义的吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-07
  • 1970-01-01
  • 1970-01-01
  • 2011-09-03
  • 2014-11-03
  • 1970-01-01
相关资源
最近更新 更多