Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript stopPropagation()防止函数触发_Javascript_Jquery_Stoppropagation - Fatal编程技术网

javascript stopPropagation()防止函数触发

javascript stopPropagation()防止函数触发,javascript,jquery,stoppropagation,Javascript,Jquery,Stoppropagation,我有一个classbody\u left\u details的子div,它位于classbody\u left\u bar的父div中。两个div都附加了onclick事件,但我想防止当您单击body\u left\u details时,body\u left\u bar冒泡。以下是相关代码: $(function() { $('.body_left_bar').click(function() { body_right_load('parent'); })

我有一个class
body\u left\u details
的子div,它位于class
body\u left\u bar
的父div中。两个div都附加了onclick事件,但我想防止当您单击
body\u left\u details
时,
body\u left\u bar
冒泡。以下是相关代码:

$(function() {
    $('.body_left_bar').click(function() {
        body_right_load('parent');
    })
    $('.body_left_details').click(function(e) {
        e.stopPropagation();
        body_right_load('child');
    })
})
function body_right_load(str) {
    alert(str);
}​
很简单。但为什么当我点击body\u left\u details时,body\u right\u load('child')没有被调用?我在e.stopPropagation()之后直接使用alert()进行了测试,效果很好。停止播放后是否不允许使用外部功能?那会被认为是冒泡吗

在Chrome中的Windows7WAMP上进行测试。任何洞见,谢谢


编辑:。单击父div将导致警报,但单击“了解它”不会产生任何结果。

这可能与
body\u right\u load()
的实际声明方式有关。如果它真的像你发布的一样,它会起作用。请提供一把小提琴来演示这个问题。确实,我已经稍微简化了总体布局,但我已经改变了身体右上角的负荷,以如上所示的方式显示,并且仍然没有开火。给我一分钟拉小提琴。像一个符咒一样工作。
Uncaught ReferenceError:aid没有定义(第38行)。它可能与
body\u right\u load()
的实际声明方式有关。如果它真的像你发布的一样,它会起作用。请提供一把小提琴来演示这个问题。确实,我已经稍微简化了总体布局,但我已经改变了身体右上角的负荷,以如上所示的方式显示,并且仍然没有开火。给我一分钟拉小提琴。类似于一个符咒。
uncaughtreferenceerror:aid未定义
(第38行)”。处理程序可以通过调用event.stopPropagation()防止事件在文档树中进一步冒泡(从而防止这些元素上的处理程序运行)。但是,附加到当前元素上的任何其他处理程序都将运行。为了防止出现这种情况,请调用event.stopImmediatePropagation()。(绑定到元素的事件处理程序的调用顺序与绑定的顺序相同。)“我再次问,这与原始发布的代码有何不同?附加到
.body\u left\u details
的事件不超过1个,因此使用
stopImmediatePropagation
应该与
stopPropagation
没有区别,除了(我不确定这一点)从粘贴的文档来看,
stopImmediatePropagation
似乎仍然会在父元素上运行click事件(换句话说,它会传播,只是不会传播到同一元素上的处理程序),但我可能在这一点上错了。Bravo@Wade,看起来你已经破解了代码!stopImmediatePropagation实现了与stopPropagation相同的效果,但使用“on”似乎已经解决了它。谢谢!将
。click()
更改为
。on()
没有区别。OP在小提琴中发布的代码已经生效(一旦明显的无关错误得到修复)。”。处理程序可以通过调用event.stopPropagation()防止事件在文档树中进一步冒泡(从而防止这些元素上的处理程序运行)。但是,附加到当前元素上的任何其他处理程序都将运行。若要防止出现这种情况,请调用event.stopImmediatePropagation()。(绑定到元素的事件处理程序的调用顺序与绑定的顺序相同。)我再次问,这与最初发布的代码有什么不同?附加到
。body\u left\u details
的事件不超过1个,因此使用
stopImmediatePropagation
应该与
stopPropagation
没有区别,除了(我不确定这一点)看起来(从粘贴的文档中)
stopImmediatePropagation
仍然会在父元素上运行click事件(换句话说,它会传播,只是不会传播到同一元素上的处理程序),但我可能在这一点上错了。Bravo@Wade,看起来你已经破解了代码!stopImmediatePropagation实现了与stopPropagation相同的效果,但使用了“on”似乎已经解决了。谢谢!从
.click()
.on()
的更改没有任何区别。OP发布在小提琴中的代码已经生效(一旦明显的无关错误得到修复)。
$(function() {
    $('.body_left_bar').on('click', function() {
        body_right_load('parent');
    })
    $('.body_left_details').on('click', function(e) {
        e.stopImmediatePropagation();
        body_right_load('child');
    })
})
function body_right_load(str) {
    alert(str);
}​