Javascript OnChange事件不发生';我似乎没有正确地上钩

Javascript OnChange事件不发生';我似乎没有正确地上钩,javascript,Javascript,可能是非常愚蠢的事情,但是假设我有两个匹配$('[id$=\u product\u id]')的元素,为什么更改事件没有正确匹配 var numberPattern = /\d+/g; $('[id$=_product_id]').each(function(idx, elem) { recordId = elem.id.match(numberPattern) productId = elem.value; console.log(recordId); $("#c

可能是非常愚蠢的事情,但是假设我有两个匹配$('[id$=\u product\u id]')的元素,为什么更改事件没有正确匹配

var numberPattern = /\d+/g;

$('[id$=_product_id]').each(function(idx, elem) {
recordId = elem.id.match(numberPattern)
productId = elem.value;         
console.log(recordId);

    $("#client_order_order_lines_attributes_" + recordId + "_product_id").on("change", function(e) {      
      console.log(recordId);
    })
});
我制作了一把小提琴来证明这一点

我遗漏了什么?

您需要声明这些变量,这是隐式全局变量的危险

var recordId = elem.id.match(numberPattern);
var productId = elem.value;
演示:您需要声明这些变量,这是隐式全局变量的危险

var recordId = elem.id.match(numberPattern);
var productId = elem.value;

演示:

您应该更改代码,在变量名称前面添加变量:

var numberPattern = /\d+/g;

$('[id$=_product_id]').each(function(idx, elem) {
var recordId = elem.id.match(numberPattern),
    productId = elem.value;         
console.log(recordId);

    $("#client_order_order_lines_attributes_" + recordId + "_product_id").on("change", function(e) {      
      console.log(recordId);
    })
});

您应该更改代码,在变量名称前面添加变量:

var numberPattern = /\d+/g;

$('[id$=_product_id]').each(function(idx, elem) {
var recordId = elem.id.match(numberPattern),
    productId = elem.value;         
console.log(recordId);

    $("#client_order_order_lines_attributes_" + recordId + "_product_id").on("change", function(e) {      
      console.log(recordId);
    })
});

这确实是可行的,肯定需要仔细阅读。谢谢这确实是可行的,肯定需要仔细阅读。谢谢