Javascript 如何为所有遵循类似ID结构的HTML对象创建更改侦听器?

Javascript 如何为所有遵循类似ID结构的HTML对象创建更改侦听器?,javascript,html,listener,Javascript,Html,Listener,我在一个页面上有几百个HTML输入和选择字段,都是表格式的,都有唯一的ID。ID都遵循一个基本的结构,有3个特定的ID结构我想听听,以便有所改变。ID结构描述如下: xx行编号作业编号 xx只是一个2位数的字母组合来描述列,rownumber是字段所在表的行号,jobnumber只是投标作业的作业号(对于单个表上的每个项目都是相同的) 我需要听所有遵循结构的ID: js-rownumber-jobnumber wi-rownumber-jobnumber qt-rownumber-jobnumb

我在一个页面上有几百个HTML输入和选择字段,都是表格式的,都有唯一的ID。ID都遵循一个基本的结构,有3个特定的ID结构我想听听,以便有所改变。ID结构描述如下:

xx行编号作业编号

xx只是一个2位数的字母组合来描述列,rownumber是字段所在表的行号,jobnumber只是投标作业的作业号(对于单个表上的每个项目都是相同的)

我需要听所有遵循结构的ID:

js-rownumber-jobnumber
wi-rownumber-jobnumber
qt-rownumber-jobnumber
如何做到这一点

不确定这是否有帮助,但在任何时候我都会知道屏幕上的最大行数,但这个数字是可变的(总最大值为300)

额外信息-

我在这里遇到的一般问题是,我有一个表被用来投标工作。每一行代表投标的一个行项目,不同的列包含关于该行项目的信息。一旦创建了投标,就必须最终确定。一旦完成,任何更改都需要记录下来,以通知某人更改需要由客户端运行。

您可以:

请注意,
change
事件不会在IE<9中冒泡。您可以使用
onpropertychange
进行这些更改,但我不确定。使用jQuery还将允许更改事件在早期版本的IE中冒泡。

您可以:


请注意,
change
事件不会在IE<9中冒泡。您可以使用
onpropertychange
进行这些更改,但我不确定。使用jQuery还将允许更改事件在早期版本的IE中冒泡。

您可以使用jQuery侦听更改事件,然后在更改事件发生后使用正则表达式解析ID

Xenph Yan的帖子似乎与您试图实现的目标非常相关:。具体来说,jQuery的正则表达式选择器插件:
.

您可以使用jQuery侦听更改事件,然后在更改事件发生后使用正则表达式解析ID

Xenph Yan的帖子似乎与您试图实现的目标非常相关:。具体来说,jQuery的正则表达式选择器插件:
.

使用jQuery,您可以尝试查找id以js
$(“[id^=js]”)开头的元素
、wi
$(“[id^=wi]”)和qt
$(“[id^=qt]”)开头的元素


您可以以各种方式在选择器中使用通配符

使用jQuery,您可以尝试查找id以js
$(“[id^=js]”)开头的元素
、wi
$(“[id^=wi]”)开头的元素
和qt
$(“[id^=qt]”)开头的元素


您可以以各种方式在选择器中使用通配符

如果更改现有表的设计是一种选择,那么我认为最好为每个元素(输入)分配多个类,而不是ID:

比如说,

将class-i分配给属于行i的所有元素
将类作业-j分配给属于作业j的所有元素
将classattr-c分配给属于c列的所有元素

现在,您可以通过指定
行、作业和属性中的任意一个来查找任何输入元素


在这种特定情况下,您可以在
input.attr js
input.attr wi
input.attr qt
上侦听各种事件。我认为这种方法可以为您节省大量使用regex的开销,并在输入字段中提供基于标记的搜索。

如果可以选择更改现有表的设计,那么我认为您最好为每个元素(输入)分配多个类,而不是ID:

比如说,

将class-i分配给属于行i的所有元素
将类作业-j分配给属于作业j的所有元素
将classattr-c分配给属于c列的所有元素

现在,您可以通过指定
行、作业和属性中的任意一个来查找任何输入元素

在这种特定情况下,您可以在
input.attr js
input.attr wi
input.attr qt
上侦听各种事件。我认为这种方法可以节省使用regex的大量开销,并在输入字段中提供基于标记的搜索

var table = document.getElementById('parentTable');
table.addEventListener('change', function(ev) {
    var target = ev.target;
    // where the regex below matches the pattern
    if ( target.id.match(/(.*?)-(\d+)-(\d+)/) ) {
        console.log(target);
    }
});