jQuery-选择器

jQuery-选择器,jquery,html-table,css-selectors,Jquery,Html Table,Css Selectors,如何将onClick操作绑定到除可单击元素之外的行? 例如,我有这样的表格: 。。。 某物 ... 如果我使用这样的代码:$('tbody>tr')。单击(函数(){alert('clicked');})然后当我单击行中的任何内容(包括链接)时,我将执行我的函数。但我希望只有在我单击了不可单击的元素(在我的示例中为“a href”)时才能执行它。利用事件冒泡: $('tbody > tr').click(function(e) { /* do something */ });

如何将onClick操作绑定到除可单击元素之外的行?
例如,我有这样的表格:

。。。
某物
...

如果我使用这样的代码:
$('tbody>tr')。单击(函数(){alert('clicked');})然后当我单击行中的任何内容(包括链接)时,我将执行我的函数。但我希望只有在我单击了不可单击的元素(在我的示例中为“a href”)时才能执行它。

利用事件冒泡:

$('tbody > tr').click(function(e) {
    /* do something */
});

$('tbody > tr a[href]').click(function(e) {
    e.stopPropagation();
});

单击链接时,它将正常工作,但防止单击事件冒泡到
tr
,因此在这种情况下不会触发其单击处理程序。

利用事件冒泡:

$('tbody > tr').click(function(e) {
    /* do something */
});

$('tbody > tr a[href]').click(function(e) {
    e.stopPropagation();
});
单击链接时,它将正常工作,但会防止单击事件冒泡到
tr
,因此在这种情况下不会触发其单击处理程序。

我想您可以向链接本身添加一个:

$('tbody > tr').click(function(){
    alert('clicked');
});
$('tbody > tr a').click(function(e){
    e.stopPropagation(); // Prevents the `click` to bubble to the tr handler
});
基本上,
click
事件默认情况下会在DOM树上“冒泡”(传播)。即,只有
tbody>tr
上的
click
处理程序,单击
tr
将导致这些元素的
click
事件(按此顺序):

  • tr
  • t车身
  • 正文
  • (html的
    html
    ?-不确定)
  • 现在,对事件的
    .stopPropagation()
    调用“防止事件在DOM树中冒泡,防止任何父处理程序收到事件通知。”(),因此将专用处理程序绑定到
    a
    元素将捕获(并停止)
    单击
    元素上的事件,但是保持
    tr
    处理程序与以前一样(除了单击
    a
    元素捕获那些以前由
    tr
    处理程序处理的
    click
    事件之外)。

    我想您可以将a添加到链接本身:

    $('tbody > tr').click(function(){
        alert('clicked');
    });
    $('tbody > tr a').click(function(e){
        e.stopPropagation(); // Prevents the `click` to bubble to the tr handler
    });
    
    基本上,
    click
    事件默认情况下会在DOM树上“冒泡”(传播)。即,只有
    tbody>tr
    上的
    click
    处理程序,单击
    tr
    将导致这些元素的
    click
    事件(按此顺序):

  • tr
  • t车身
  • 正文
  • (html的
    html
    ?-不确定)

  • 现在,对事件的
    .stopPropagation()
    调用“防止事件在DOM树中冒泡,防止任何父处理程序收到事件通知。”(),因此将专用处理程序绑定到
    a
    元素将捕获(并停止)
    单击
    元素上的事件,但是让
    tr
    处理程序保持原样(除了单击
    a
    元素捕获那些
    click
    事件,这些事件以前是由
    tr
    处理程序处理的。)

    @Chvanikoff是的,它看起来很蹩脚,我知道:)我已经详细阐述了我的答案,以弥补(新的)不足来自以前的信息。@Chvanikoff是的,它看起来很蹩脚,我知道:)我详细阐述了我的答案,以弥补以前(新)信息的不足。