Javascript 将事件动态绑定到表行&;柱

Javascript 将事件动态绑定到表行&;柱,javascript,jquery,html,Javascript,Jquery,Html,我试图仅在第二列应用click事件,并在第三列的按钮上应用click事件,但事件未触发 html: 您的代码更复杂。试试这个 $( '.table .tabTitle').on("click",function(){ var id = $(this).parents('tr').attr('id'); console.log(id); }); $( '.table .btn').on("click",function(){

我试图仅在第二列应用click事件,并在第三列的按钮上应用click事件,但事件未触发

html:


您的代码更复杂。试试这个

$( '.table .tabTitle').on("click",function(){            
    var id = $(this).parents('tr').attr('id');
    console.log(id);            
});

$( '.table .btn').on("click",function(){           
    var id = $(this).parents('tr').attr('id');
    console.log(id);
});
$('.table.tabTitle')。在(“单击”,函数(){
var id=$(this.parents('tr').attr('id');
console.log(id);
});
$('.table.btn')。打开(“单击”,函数(){
var id=$(this.parents('tr').attr('id');
console.log(id);
});

史密斯
按钮

您的代码更复杂。试试这个

$( '.table .tabTitle').on("click",function(){            
    var id = $(this).parents('tr').attr('id');
    console.log(id);            
});

$( '.table .btn').on("click",function(){           
    var id = $(this).parents('tr').attr('id');
    console.log(id);
});
$('.table.tabTitle')。在(“单击”,函数(){
var id=$(this.parents('tr').attr('id');
console.log(id);
});
$('.table.btn')。打开(“单击”,函数(){
var id=$(this.parents('tr').attr('id');
console.log(id);
});

史密斯
按钮

您应该将事件委托给最近的静态父容器。例如,如果.table元素是静态的,并且在绑定事件时在DOM中可用:

$('.table').delegate("tr .tabRow, tr .btn","click",function(){
     var id = $(this).closest('tr').attr('id');
     console.log(id);
});
注意:

从jQuery 1.7开始,.delegate()已被.on()方法取代。 然而,对于早期版本,它仍然是 使用事件委派。有关事件绑定和委派的更多信息 在.on()方法中。通常,这些是等效的模板 对于这两种方法:


您应该将事件委托给最近的静态父容器。例如,如果.table元素是静态的,并且在绑定事件时在DOM中可用:

$('.table').delegate("tr .tabRow, tr .btn","click",function(){
     var id = $(this).closest('tr').attr('id');
     console.log(id);
});
注意:

从jQuery 1.7开始,.delegate()已被.on()方法取代。 然而,对于早期版本,它仍然是 使用事件委派。有关事件绑定和委派的更多信息 在.on()方法中。通常,这些是等效的模板 对于这两种方法:


委托已被.on()方法取代(有关它的更多信息),因此我将使用“on”而不是“delegate”(希望您不介意)

按照您的代码风格,您可以尝试以下操作:

$('.table').on("click", "tr td:nth-child(3)", function () {
    $(this).find("button").off('click').on('click', function() {// Remove the click event firstly or you'll end up with a pile of them
        var id = $(this).parents('tr').attr('id');
        console.log(id);
    });
});
不过我会这样做:

$('.table').on("click", "tr td:nth-child(3) button", function () {
    //$(this).find("button").off('click').on('click', function() {
        var id = $(this).parents('tr').attr('id');
        console.log(id);
    //});
});

委托已被.on()方法取代(有关它的更多信息),因此我将使用“on”而不是“delegate”(希望您不介意)

按照您的代码风格,您可以尝试以下操作:

$('.table').on("click", "tr td:nth-child(3)", function () {
    $(this).find("button").off('click').on('click', function() {// Remove the click event firstly or you'll end up with a pile of them
        var id = $(this).parents('tr').attr('id');
        console.log(id);
    });
});
不过我会这样做:

$('.table').on("click", "tr td:nth-child(3) button", function () {
    //$(this).find("button").off('click').on('click', function() {
        var id = $(this).parents('tr').attr('id');
        console.log(id);
    //});
});


这些是TRs静力学吗???在您尝试绑定click事件时,这些TRs在DOM中可用吗?为什么您要尝试委派事件?(可能有很多很好的原因,只是想知道?@A.Wolff,因为我正在动态地向表中添加行,所以如果行(tr)是动态添加的,那么将事件委托给表级(如果是静态的):
$('.table').delegate(“tr:nth child(2)td”,“click”,function(){…})仅供参考,
delegate()
已被('click','selector',handler')上的
取代
@A.Wolff html中的行是例如。。。在加载html之前,我将清除表中的内容,并从另一个js文件中新添加行。因此,要将事件绑定到表中动态添加的行,我们需要在jqueryYa的API上使用委托(或)绑定(或),但要委托事件,父级必须是静态的,否则委托无法工作:这些TRs是静态的吗???在您尝试绑定click事件时,这些TRs在DOM中可用吗?为什么您要尝试委派事件?(可能有很多很好的原因,只是想知道?@A.Wolff,因为我正在动态地向表中添加行,所以如果行(tr)是动态添加的,那么将事件委托给表级(如果是静态的):
$('.table').delegate(“tr:nth child(2)td”,“click”,function(){…})仅供参考,
delegate()
已被('click','selector',handler')上的
取代
@A.Wolff html中的行是例如。。。在加载html之前,我将清除表中的内容,并从另一个js文件中新添加行。因此,若要将事件绑定到表中动态添加的行,我们需要在jqueryYa的API上使用委托(或)绑定(或),但若要委托事件,父级必须是静态的,否则委托无法工作:即使我动态地有更多行,此操作是否有效?…是!。。。。试试看。。您需要确保动态tdsNo上的类保持不变,否则,无需尝试!)@答:沃尔夫:你应该阅读这篇文章,而不是不争论,把时间花在提供信息上solution@Dipaks这是一个很好的链接,事实上你是正确的,OP应该避免使用它,如果可能的话。即使我动态地有更多的行,也要避免使用它!。。。。试试看。。您需要确保动态tdsNo上的类保持不变,否则,无需尝试!)@答:沃尔夫:你应该阅读这篇文章,而不是不争论,把时间花在提供信息上solution@Dipaks这是一个很好的链接,确实你是对的,OP应避免在以下情况下使用它:possible@Wolff它可以工作,但只要我单击该行,行和按钮事件都会触发。@iHappyk您必须停止按钮事件的传播,而不是嵌套处理程序编辑:好的,我会更新答案,我一开始并没有看到您是嵌套处理程序,这并没有真正的意义sense@iHappyk只有一件事,按照此选择器
.button
的建议,在您发布的代码中没有带有class
button
的元素。您的意思是用元素代替类型按钮还是类
.btn
?您是否以单元格(TD)
n个子元素为目标?不清楚你到底在期待什么<代码>我试图仅在第二列应用click事件,并在第三列的按钮上单击事件。
因此,您的目标不是行而是单元格。我更新了答案,反映了我对问题的理解(最后)对不起,是的,我的目标是正确的cell@iHappyk无论如何,您发布的代码中没有设置任何ID的TR。下次提问时,请描述预期行为,并在中发布相关代码question@Wolff它可以工作,但只要我单击行,行和按钮都可以