Javascript 在父对象上触发单击事件,但在子对象上阻止单击事件

Javascript 在父对象上触发单击事件,但在子对象上阻止单击事件,javascript,jquery,event-handling,event-propagation,Javascript,Jquery,Event Handling,Event Propagation,我有两个事件绑定到两个对象,一个在另一个内,大小相同。让我们称之为容器和内容。这两个事件都指向不同的功能。内容上的事件是默认设置的,由于我无法删除它,我需要一种方法来阻止它或暂时取消设置它 我希望单击它们只会触发与容器相关的事件。这是可能的还是不可能的。实现这一目标的最佳方式是什么 下面是一个例子。如果一切正常,单击白色正方形应变为绿色,否则将变为红色 $document.on'click',container',goGreen $document.on'click','content',go

我有两个事件绑定到两个对象,一个在另一个内,大小相同。让我们称之为容器和内容。这两个事件都指向不同的功能。内容上的事件是默认设置的,由于我无法删除它,我需要一种方法来阻止它或暂时取消设置它

我希望单击它们只会触发与容器相关的事件。这是可能的还是不可能的。实现这一目标的最佳方式是什么

下面是一个例子。如果一切正常,单击白色正方形应变为绿色,否则将变为红色

$document.on'click',container',goGreen $document.on'click','content',goRed goGreen事件函数 { $'content'.addClass'green' 表演班 //现在停下来!!! //不要在内容上运行单击事件!!! } 函数goRed事件 { $'content'.addClass'red' 表演班 } 函数显示类 { $'classes.html$'content.attr'class' } 内容{ 显示:内联块; 宽度:100px; 高度:100px; 边框:1px000; 光标:指针; } 格林先生{ 背景颜色:浅绿色; } 瑞德先生{ 背景色:番茄; }

一个选项是使用css并应用于内容指针事件:无,但请记住,这将禁用该元素上的所有指针事件。

如您在注释中所述,您希望在特定条件下停止goRed方法,然后在函数内部执行此操作

if(event.target.id=='content') return; // Add your condition here and return.
而不是event.target.id=='content'条件,在希望执行时检查您的条件

更新

您可以检查此条件$this.parent.is'container'来检查您的内容是否在容器中

片段

$document.on'click',container',goGreen $document.on'click','content',goRed goGreen事件函数 { $this.find'.content'.addClass'green' } 函数goRed事件 { 如果$this.parent.is'container'return;//在此处添加条件并返回。 $this.addClass'red' } .内容{ 显示:内联块; 宽度:100px; 高度:100px; 边框:1px000; 光标:指针; } 容器{ 显示:内联块; 填充:3倍; 边框:2倍纯红; } 格林先生{ 背景颜色:浅绿色; } 瑞德先生{ 背景色:番茄; }
正如您的评论所阐明的,您不希望执行内容上的处理程序,但希望事件冒泡到父级。在这种情况下,您可以停止内容侦听器函数本身中的事件处理。虽然我觉得你根本不应该在内容上使用侦听器,因为你没有执行它

$document.on'click',container',goGreen $document.on'click','content',goRed goGreen事件函数 { $'content'.addClass'green' 表演班 //现在停下来!!! //不要在内容上运行单击事件!!! } 函数goRed事件 { ifevent.target.id===“内容” 回来 $'content'.addClass'red' 表演班 } 函数显示类 { $'classes.html$'content.attr'class' } 内容{ 显示:内联块; 宽度:100px; 高度:100px; 边框:1px000; 光标:指针; } 格林先生{ 背景颜色:浅绿色; } 瑞德先生{ 背景色:番茄; }

您应该使用event.stopPropagation来防止触发的事件进一步执行。下面是一个可以帮助您解决问题的演示:

使用event.stopPropagation来阻止事件向parents冒泡。我想我正在寻找另一种方法。停止子对象到父对象并直接到父对象。如果我理解正确,这意味着永远不会触发内容上的单击处理程序。我说的对吗?@abhishekkannojia yep,对,那么你可以停止内容监听器本身的事件处理。我想通过内容,让正方形只得到使其变绿的函数。@a.barbieri那么你根本不想点击内容??你想什么时候触发点击内容?你的问题很有意义。在实际应用程序中,我有两种情况:一种情况下我需要事件单击内容才能工作,另一种情况下我不需要。内容上的事件始终存在,而容器上的事件仅在特定条件下启动。@a.barbieri我添加了一个条件检查它是否适用于您。内容上的侦听器在这个脚本就是我需要阻止它的原因,如果出现内容被容器包装的情况。仅当出现这种情况时才设置容器上的事件。这就是为什么我有那个听众。我不能接受两个答案,但我投了你的票。再次感谢