Answers:
<span onclick="event.stopPropagation(); alert('you clicked inside the header');">something inside the header</span>
对于IE: window.event.cancelBubble = true
<span onclick="window.event.cancelBubble = true; alert('you clicked inside the header');">something inside the header</span>
event
似乎也可以在IOS Safari的内联事件中使用。
有两种方法可以从函数内部获取事件对象:
如果您需要支持不遵循W3C建议的旧版浏览器,通常在一个函数中,您将使用以下内容:
function(e) {
var event = e || window.event;
[...];
}
它会先检查一个,然后再检查另一个,并存储在事件变量中找到的那个。但是,在嵌入式事件处理程序中,没有e
要使用的对象。在这种情况下,您必须利用arguments
始终可用的集合,并引用传递给函数的完整参数集:
onclick="var event = arguments[0] || window.event; [...]"
但是,通常来说,如果需要停止传播之类的复杂操作,则应避免使用内联事件处理程序。就可读性和可维护性而言,从中期和长期来看,分别编写事件处理程序并将其附加到元素上是一个更好的主意。
onclick="foo(event)"
,然后在函数中传递function foo(event){/* do stuff with event */}
。这适用于IE和W3C事件模型。
请记住,FireFox不支持window.event,因此它必须符合以下要求:
e.cancelBubble = true
或者,您可以将W3C标准用于FireFox:
e.stopPropagation();
如果您想花哨的话,可以这样做:
function myEventHandler(e)
{
if (!e)
e = window.event;
//IE9 & Other Browsers
if (e.stopPropagation) {
e.stopPropagation();
}
//IE8 and Lower
else {
e.cancelBubble = true;
}
}
<div onclick="myEventHandler(event);">
e.cancelBubble
在IE中返回false!无法达到e.cancelBubble = true;
指令。请改用SoftwareARM的条件!!
我有同样的问题-IE中的js错误框-就我所知,这在所有浏览器中都可以正常运行(event.cancelBubble = true在IE中可以完成工作)
onClick="if(event.stopPropagation){event.stopPropagation();}event.cancelBubble=true;"
这对我有用
<script>
function cancelBubble(e) {
var evt = e ? e:window.event;
if (evt.stopPropagation) evt.stopPropagation();
if (evt.cancelBubble!=null) evt.cancelBubble = true;
}
</script>
<div onclick="alert('Click!')">
<div onclick="cancelBubble(event)">Something inside the other div</div>
</div>
对于ASP.NET网页(不是MVC),可以将Sys.UI.DomEvent
对象用作本机事件的包装。
<div onclick="event.stopPropagation();" ...
或者,将事件作为参数传递给内部函数:
<div onclick="someFunction(event);" ...
并在someFunction中:
function someFunction(event){
event.stopPropagation(); // here Sys.UI.DomEvent.stopPropagation() method is used
// other onclick logic
}
由于因果关系,我无法评论,因此我将其作为整体答案来写:根据Gareth的答案(var e = arguments [0] || window.event; [...]),我在onclick上使用此oneliner内联用于快速破解:
<div onclick="(arguments[0] || window.event).stopPropagation();">..</div>
我知道已经很晚了,但是我想让您知道这可以一行完成。大括号返回在两种情况下都具有stopPropagation-function的事件,因此我尝试将它们封装在大括号中,如if和.... it一样。:)
这也有效-在链接HTML中,将onclick与return一起使用,如下所示:
<a href="mypage.html" onclick="return confirmClick();">Delete</a>
然后,comfirmClick()函数应类似于:
function confirmClick() {
if(confirm("Do you really want to delete this task?")) {
return true;
} else {
return false;
}
};
confirm
是不相关的。我指的是返回值。quote:在链接HTML中,使用onclick 和这样的return
最好的解决方案是通过javascript函数处理事件,但为了直接使用html元素使用简单快捷的解决方案,并且一旦不赞成使用“ event”和“ window.event”并且不受普遍支持(https://developer.mozilla.org/zh-CN/docs/Web/API/Window/event),我建议使用以下“硬代码”:
<div onclick="alert('blablabla'); (arguments[0] ? arguments[0].stopPropagation() : false);">...</div>