如何禁用父元素的onclick元素

时间:2011-01-12 06:41:38

标签: javascript jquery html css

我有一张像tr一样的桌子

<tr onclick="doprocess1()">
   <td>Some data</td>
   <td>Some data</td>
   <td><button onclick="doprocess2()"</td>  <!--I want to disable the clickevent of the <tr> here -->
</tr>

如何实现这一目标?

3 个答案:

答案 0 :(得分:3)

您需要停止event bubbling

注意

将其设为unobtrusive

<tr id="tr1">
   <td>Some data</td>
   <td>Some data</td>
   <td><button id="bt1">Click</button></td>  <!--I want to disable the clickevent of the <tr> here -->
</tr>


$(function(){
    $("#tr1").click(function(){
    });
    $("#bt1").click(function(e){
        e.stopPropagation();
    });
});

答案 1 :(得分:2)

<td><button onclick="doprocess2(event);"</td>

 function doprocess2(evt) {

    evt.stopPropagation();
    evt.preventDefault();

    // your existing code goes here
}

适用于Firefox,Chrome和IE9。不确定“事件”对象未通过的旧版IE。 (改用window.event)。

答案 2 :(得分:2)

有几种方法可以做到这一点。 在您的情况下,最简单的可能是以下内容:

像这样定义doprocess2:

function doprocess2(e) {
    e.stopPropagation && e.stopPropagation() || (e.cancelBubble = true);
    ...
}

并将其称为:

onclick="doprocess2(event);"

这适用于所有现代浏览器以及ie6,ie7&amp; IE8

这是一个可行的例子:

<html>
<head>
<script>
function doprocess1() { alert('tr'); }
function doprocess2(e) {
    e.stopPropagation && e.stopPropagation() || (e.cancelBubble = true);
    alert('td');
}
</script>
</head>
<body>
<table>
<tr onclick="doprocess1();">
    <td>click tr</td>
    <td><button onclick="doprocess2(event);">click td only</button></td>
</tr>
</table>
</body>
</html>