为动态元素附加事件处理程序

attach event handler for dynamic element

我尝试为动态元素附加事件处理程序但失败了。

这是我的一些代码。我希望事件可以被动态元素调用。 也许 javascript 提供功能来自动支持动态元素的附加事件,而无需再次绑定它,例如 jQuery live 或 on 方法。 我想在 Magento 销售 > 订单 > 创建新订单页面选择州或省时添加加载城市数据的功能,而无需搜索正确的 javascript 文件并再次尝试在其上绑定事件。

window.addEventListener('load', 函数(){
    函数 getCity(){
        编号= this.selectedIndex;
        姓名= this.name;
        getKota(id, 名字);
    }

    billing_address_region_id=document.getElementsByName('order[billing_address][region_id]');
    shipping_address_region_id=document.getElementsByName('order[shipping_address][region_id]');

    var event = new Event('change');
    billing_address_region_id[0].addEventListener('change', getCity, false);
    shipping_address_region_id[0].addEventListener('change', getCity, false);
    billing_address_region_id[0].dispatchEvent(事件);
    shipping_address_region_id[0].dispatchEvent(事件);
});

非常感谢

您的代码仅适用于已经存在的元素。我建议使用 jQuery.

使用jQuery,可以使用"on"方法。

$('#elem').on('change', function(){
  // Do stuff
});

注意:此解决方案未经测试。

由于目标元素是动态添加的,您可以做的是向 window 注册一个更改事件处理程序,然后查看是否有任何目标元素触发了更改事件,如果您的操作是这样的话。

window.addEventListener('change', function (e) {
    var el = e.target;
    if (el.name == 'order[billing_address][region_id]' || el.name == 'order[shipping_address][region_id]') {
        getKota(el.selectedIndex, el.name);
    }
});