function focusInputFunction(event){
console.log("focus");
event.stopPropagation();
event.stopImmediatePropagation();
}
function clickTr(){
console.log("tr");
}
<table>
<tr onclick="clickTr()">
<td>
<input id="myInput" onfocus="focusInputFunction(event)"type="text">
</td>
</tr>
</table>
我希望当我关注我的文本字段时,<tr>
元素上的事件click
不会被执行。
我只想在文本字段上执行焦点事件,而不想在<tr>.
上触发click事件。
我该怎么做?
4条答案
按热度按时间vkc1a9a21#
你可以尝试使用一个 flag 变量和 return 从函数
clickTr
基于value,如下所示:jobtbby32#
event.stopPropagation();
仅停止焦点事件向父级的传播。单击事件仍将被激发。在输入时将其添加到click
事件。验证码:iklwldmw3#
通过注册
<tr>
和<input>
的共同祖先元素来委托"click"事件,然后让事件处理程序在<input>
为:focused
时不做任何事情。🞴 of<tr>
and<input>
and then have the event handler❉ do nothing should the<input>
be:focused
.在下面的例子中,我们有一个
<table>
和两个<tbody>
,其中第二个是隐藏的。每当用户单击<table>
或它的一个子元素时,第二个<tbody>
就会显示/隐藏。如果<input>
为:focused
on,则不会发生前面提到的行为。参见事件委托。
🞴 在本例中,
<table>
注册到“click”事件,但<tr>
也可以正常工作。事件处理程序基本上是一个函数,当一个注册的事件被触发时调用。
示例中有详细注解
anauzrmj4#
在处理冒泡事件时,可以使用event.target检查事件的起源。