禁用父元素的onclick事件

时间:2011-03-26 22:24:07

标签: javascript

假设我有一个带onclick事件的元素,并且其中包含另一个元素,如何禁用子元素的onclick?

例:
<h3 onclick="do something"><input type="checkbox" name="child" /> text</h3>

选中该复选框后,不应触发onclick事件。

感谢。

5 个答案:

答案 0 :(得分:4)

Javascript事件是自下而上传播的,即如果你点击一个按钮,所有后代都会以有序的方式接收onclick事件,除非其中一个通过stopPropagation拦截它(或者返回true,意味着我处理了这个)< / p>

示例:

<h3 onclick="do something"><input type="checkbox" name="child" onclick="return false;" /> text</h3>

你也可以将父亲的onclick绑定到一个函数:

function onlick_handler(e)
{
   e.stopPropagation(); //this event would propagate to parents of this object which are clicked as well
   // the rest here
}

答案 1 :(得分:4)

您的处理程序(“do something” - h3标记的一部分)可以检查原始元素的tagName

var origin = event.srcElement || event.target;
if (origin.tagName && origin.tagName.match(/h3/i)){
  // do things
} else {return true;}

现在,对于复选框,单击处理程序被触发,但不会发生任何事情。或者,您可以为h3-tag提供唯一ID,并检查所单击元素的ID。

答案 2 :(得分:2)

答案 3 :(得分:1)

我可以提出this anwser我提供的类似问题吗?

上面我复制了原来的答案:


我的第一个问题问题非常类似。但改为&lt; div&gt;还有一个复选框,它是一张桌子。查看我的非工作代码:

<table>
  <tr onClick="alert('I expect this alert when Cell_1 or Cell_2 are clicked but not Cell_3')">
    <td>Cell_1</td>
    <td>Cell_2</td>
    <td onClick="alert('I expect this alert only when Cell_3 is clicked')">Cell_3</td>
  </tr>
<table>

单击Cell_1或Cell_2,我的代码按预期工作,但是当没有单击Cell_3时,因为它显示了2个警报。

第一个是:

&#34;我希望只有在点击Cell_3时才会出现此警报&#34;

,第二个是:

我希望在单击Cell_1或Cell_2但不是Cell_3 时发出此警报。

Google-ing我如何管理,我在this briliant上发现Quirksmode帖子。

嗯,简单地说,我可以这样解决这个难题:

<table>
  <tr onClick="alert('I expect this alert when Cell_1 or Cell_2 are clicked but not Cell_3')">
    <td>Cell_1</td>
    <td>Cell_2</td>
    <td onClick="Cell_3Alert(event)">Cell_3</td>
  </tr>
<table>

和Javascript:

function Cell_3Alert(e) {
  alert('I expect this alert only when Cell_3 is clicked');

  if (!e) var e = window.event; 
  e.cancelBubble = true;
  if (e.stopPropagation) e.stopPropagation();
}

我已经过测试,它适用于FireFox 3.6 +,IE6 +和Chrome。

希望它有帮助!

答案 4 :(得分:0)

如果选中该复选框,则可以使用onClick作为将h3.onClick属性设置为空白的复选框,如果未选中该复选框,则将其设置为正确的函数引用。