动态表行,将单击事件委派给新添加的元素
Dynamic table row, delegation of click event to newly added elements
首先,我想提一下,我几乎经历了每一个类似的问答,在我的案例中,没有解决方案和建议帮助了我。
我有这个构造 DEMO,并在下面输入向表添加新元素的代码。我喜欢新元素,它是一个 tr 和 td,具有与现有元素相同的功能。我尝试了live()和delegate(),没有任何效果。所有指向我已经在使用但仍然不起作用的 on() 函数的建议和教程。我做错了什么?请,任何建议将不胜感激。下面的代码添加了新元素:
$(function(){
$('#add').on('click',function() {
$('#edit-tb tr:last').after('<tr><td><button class="up">Up</button></td><td><span class="times" data-myval="1"></span>Goe</td><td><button class="down">Down</button></td></tr>');
});
});
您的事件委派不正确。尝试如下。
$(document).on('click', '.up', function () {
var count = $(this).closest('tr').find('.times').attr('data-myval');
count++;
if (count > 4) {
count--;
$('#max').modal('show');
$(this).closest('tr').find('.times').text(4 + ' x ');
}
$(this).closest('tr').find('.times').attr('data-myval', count);
$(this).closest('tr').find('.times').text(count + ' x ');
});
$(document).on('click', '.down', function () {
var count = $(this).closest('tr').find('.times').attr('data-myval');
count--;
parseInt($(this).closest('tr').find('.times').attr('data-myval', count))
$(this).closest('tr').find('.times').text(count + ' x ');
if (count < 2) {
$(this).closest('tr').find('.times').text('');
}
if (count < 1) {
$(this).parents('tr').remove();
}
});
更新的小提琴
事件委托在容器上捕获事件,但仅在目标元素或其父元素之一具有特定选择器时才调用回调。要委派事件,请使用 .on()
将事件附加到父级,但添加第二个参数,用于声明目标。例如:
$('.table') // container
/* event , target, handler */
.on('click', '.up' , function() {});
如果希望绑定忽略标头,则应将事件处理程序附加到关闭容器、.table
或事件.table > tbody
。
演示(小提琴):
$(function() {
$('.table')
.on('click', '.up', function() {
var element = $(this);
var count = element.closest('tr').find('.times').attr('data-myval');
count++;
if (count > 4) {
count--;
$('#max').modal('show');
element.closest('tr').find('.times').text(4 + ' x ');
}
element.closest('tr').find('.times').attr('data-myval', count);
element.closest('tr').find('.times').text(count + ' x ');
})
.on('click', '.down', function() {
var element = $(this);
var count = element.closest('tr').find('.times').attr('data-myval');
count--;
parseInt(element.closest('tr').find('.times').attr('data-myval', count))
element.closest('tr').find('.times').text(count + ' x ');
if (count < 2) {
element.closest('tr').find('.times').text('');
}
if (count < 1) {
element.parents('tr').remove();
}
});
});
相关文章:
- 将新对象添加到本地存储
- 在Knockout中将新项添加到对象数组
- 为新对象添加函数,将对象添加到数组中.理解困难'这'关键字
- 如何将新的
- 添加到
- 使用JavaScript单击
- 添加到
- 将新行添加到localStorage变量中
- 从HTML表单中获取计算得到的JavaScript数据,并将其作为新元素添加到相同的表单操作中以使用PHP保存
- 当上一行/当前行被填充时,将新行添加到HTML表中
- Regex用于在特定条件下为新句子添加空格或句号
- 什么'在javascript中将新方法添加到对象中的区别是什么
- 当新行添加到表中时,使用AJAX更新页面
- 将新行添加到数据库时的 Javascript 警报
- 将新时区添加到时刻.js时区
- 有没有办法让 Javascript 在将新属性添加到给定对象时抛出错误
- 如何创建具有预定义值的下拉列表,但也应该有将新值添加到列表中的选项
- 将新对象添加到 chrome 本地存储
- 通过 Javascript 将新对象添加到 JSON 文件中
- 如何将新用户添加到我的用户数据库对象中
- 数据表 sDom 质询将新元素添加到表的左下角
- 使用 contructor 参数将新属性添加到原型
- 如何将新项目添加到 srt 文件中