Javascript 选择不带TR的表TD
我有这样一个html表:Javascript 选择不带TR的表TD,javascript,html,css,Javascript,Html,Css,我有这样一个html表: <table> <tr onClick="someFunc();"> <td>Foo</td> <td><button onClick="anotherFunc();">Bar</button></td> </tr> </table> 问题是当我点击tr时工作正常,但当我按下TD内的按钮时,它会启动两个功能,因此我
<table>
<tr onClick="someFunc();">
<td>Foo</td>
<td><button onClick="anotherFunc();">Bar</button></td>
</tr>
</table>
问题是当我点击tr时工作正常,但当我按下TD内的按钮时,它会启动两个功能,因此我希望当我点击按钮时,只启动按钮功能。您的
点击操作正在传播到按钮的所有父元素。要停止此操作,请在单击事件中使用event.cancelBubble=true
(或者,如果使用jQuery,可以使用event.stopPropagation()
)。您的单击操作将传播到按钮的所有父元素。要停止此操作,请在单击事件中使用event.cancelBubble=true
(或者,如果您使用jQuery,可以使用event.stopPropagation()
)。首先,不要将内联处理程序与jQuery一起使用。这将处理程序从注册中分离出来,没有任何好的理由,并导致维护问题。使用类或ID来匹配元素,并使用jQuery处理程序
问题是事件传播。要停止单击传播,请在处理程序中使用e.stopPropagation()
:
<table>
<tr class="doSomeFunc">
<td>Foo</td>
<td><button class="doAnotherFunc">Bar</button></td>
</tr>
</table>
$('.doSomeFunc').click(function(e){
alert("Foo");
});
$('.doAnotherFunc').click(function(e){
e.stopPropagation();
alert("Bar");
});
福
酒吧
$('.doSomeFunc')。单击(函数(e){
警惕(“Foo”);
});
$('.doAnotherFunc')。单击(函数(e){
e、 停止传播();
警报(“酒吧”);
});
如果要坚持使用现有的非jQuery代码,只需更改以下内容:
<button onClick="anotherFunc();return false;">
来自鼠标处理程序的返回false
与e.stopPropagation()
和e.preventDefault()
对于初学者,不要将内联处理程序与jQuery一起使用。这将处理程序从注册中分离出来,没有任何好的理由,并导致维护问题。使用类或ID来匹配元素,并使用jQuery处理程序
问题是事件传播。要停止单击传播,请在处理程序中使用e.stopPropagation()
:
<table>
<tr class="doSomeFunc">
<td>Foo</td>
<td><button class="doAnotherFunc">Bar</button></td>
</tr>
</table>
$('.doSomeFunc').click(function(e){
alert("Foo");
});
$('.doAnotherFunc').click(function(e){
e.stopPropagation();
alert("Bar");
});
福
酒吧
$('.doSomeFunc')。单击(函数(e){
警惕(“Foo”);
});
$('.doAnotherFunc')。单击(函数(e){
e、 停止传播();
警报(“酒吧”);
});
如果要坚持使用现有的非jQuery代码,只需更改以下内容:
<button onClick="anotherFunc();return false;">
从鼠标处理程序返回false
将执行与e.stopPropagation()
和e.preventDefault()
相同的操作,您需要使用e.stopPropagation()代码>
防止事件在DOM树中冒泡,防止任何父处理程序收到事件通知
下面是一个演示:
$(“tr”)。单击(函数(e){
警惕(“Foo”);
})
$(“按钮”)。单击(功能(e){
e、 停止传播();
警报(“酒吧”);
});
福
酒吧
您需要使用e.stopPropagation()代码>
防止事件在DOM树中冒泡,防止任何父处理程序收到事件通知
下面是一个演示:
$(“tr”)。单击(函数(e){
警惕(“Foo”);
})
$(“按钮”)。单击(功能(e){
e、 停止传播();
警报(“酒吧”);
});
福
酒吧
OP已经标记了jQuery,但是他/她的示例没有jQuery。@Michael Giovanni Pumo:我注意到了,因此第二个“hack”解决方案:)第二个hack对me@MichaelGiovanni Pumo:当有人将Javascript
这样的问题也标记为jQuery
时,我倾向于认为他们“可能”想要一个jQuery替代方案,因为这是一个常见的请求。不过,我看到您现在已经从问题中删除了该标记。@TrueBlueAussie-因为问题已经回答,并且没有使用jQuery,我觉得为未来的用户删除jQuery标记是合适的。OP已经标记了jQuery,但他/她的示例没有jQuery。@Michael Giovanni Pumo:我注意到了,因此出现了第二个“黑客”解决方案:)第二次破解对me@MichaelGiovanni Pumo:当有人将Javascript
这样的问题也标记为jQuery
时,我倾向于认为他们“可能”想要一个jQuery替代方案,因为这是一个常见的请求。我看到您现在已经从问题中删除了该标记。@TrueBlueAussie-由于问题已经得到回答,并且没有使用jQuery,我觉得为将来的用户删除jQuery标记是合适的。