JS事件侦听器,用于动态添加元素

阮阮

我通过循环基于JSON对象动态创建了一些按钮。我希望单击保存按钮时它能够传递正确的索引。

for (var i = 0; i < jsonObject.results.length; i++) {
    var row = `<tr scope="row" class="test-row-${jsonObject.results[i].id}">
                    ...
                  
                  <td id="btn-list">
                    <button class="btn btn-sm btn-danger" data-testid="${jsonObject.results[i].id}" id="delete-${jsonObject.results[i].id}">Delete</button>
                    <button class="btn btn-sm btn-success" disabled data-testid="${jsonObject.results[i].id}"  id="save-${jsonObject.results[i].id}">Save</button>
                  </td>
    </tr>`;

$(`#save-${jsonObject.results[i].id}`).on('click', saveUpdate(i))
}

当前的保存按钮自动触发saveUpdate()并传递每个索引

    $(document).on('click', `#save-${jsonObject.results[i].id}`, function(){
      saveUpdate(i);
    });

    $(`#save-${jsonObject.results[i].id}`).click(function(){
      saveUpdate(i);
    });

这两个事件侦听器等待单击,但将传递jsonObject.results.length而不是单击的索引。

Abhinav库马尔

这是由于吊装而发生的。变量是由var关键字创建的,并且在循环中,您绑定了该事件。由于var具有功能范围,因此它保留了它的值,即使在绑定事件之后,当它访问它时,它也得到了最后一个值,即您的数组长度。

使用let相反它将起作用。块范围。休息似乎很好。会工作的

for (let i = 0; i < jsonObject.results.length; i++) {
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何为动态附加元素的 classList 添加事件侦听器

在动态创建的元素上添加事件侦听器

将事件侦听器添加到动态添加的列表元素

使用jQuery将事件侦听器添加到动态添加的元素中

动态将Change事件侦听器应用于每个选择元素

如何将事件侦听器添加到动态创建的HTML列表元素?

Dojo-将事件侦听器添加到动态创建的元素

如何向原型内动态创建的元素添加事件侦听器?

将事件侦听器添加到动态创建的元素中

将事件侦听器添加到使用Javascript从API捕获的动态生成的元素中

添加事件侦听器在动态 (*ngFor) 创建的元素中不起作用

无法使用 JQuery 向克隆元素添加事件侦听器 - 用于 CSS 动画

删除元素的动态附加事件侦听器

为变量动态添加事件侦听器

向推入数组的 DOM 元素添加事件侦听器

JS-为与querySelectorAll匹配的所有元素添加单击事件侦听器

在JS中创建元素时内联添加事件侦听器是不好的做法吗?

将事件侦听器添加到js中的多个选择元素

JS:隐藏元素上的事件侦听器

Vue.js在实例内部添加事件侦听器?

添加事件侦听器并在动态生成的元素上使用纯JavaScript获得点击价值

动态创建按钮的事件侦听器

为多个元素添加事件侦听器并检测哪个元素触发事件 - jQuery

新元素的事件侦听器(单击)。

动态添加元素上的click事件

元素事件侦听器回调不适用于自定义事件

如何在动态字符串的反应js中事件侦听器或单击侦听器?

当鼠标不在附加元素上时,鼠标悬停事件侦听器是否会影响性能?

向 Symfony3 中动态添加的字段添加事件侦听器