【发布时间】:2015-02-23 17:07:28
【问题描述】:
是否可以在不阻止默认事件行为的情况下停止事件传播?
这应该让输入在滚动时增加/减少,但阻止它冒泡到任何其他元素并滚动外部 div。 (以下是仅限 Chrome,我认为)
$("input[type=number]").on("mousewheel",function(e){ // only works with chrome I think
e.stopPropagation();
console.log("scrolled");
});
div{
height:50px;
overflow:auto;
border: 1px solid black;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<div>
<input type='number'>
<div class='filler'></div>
</div>
但stopPropagation 调用似乎什么也没做。外部 div 仍然滚动。
现在,这个特殊问题(滚动数字输入)可以通过preventingDefault 和手动递增和递减输入 (JSFiddle) 来解决。
我正在寻找一种不涉及重新创建默认行为的通用解决方案。
【问题讨论】:
-
你不能阻止滚动?
-
你的标题和你的问题是相反的。你想做什么:在不停止事件传播的情况下阻止默认,还是在不阻止默认的情况下停止事件传播?
-
@adeneo 真的吗?
document.body.addEventListener('mousewheel', function (e) {e.preventDefault();}) -
@meagar 哎呀,更正了。
-
我喜欢这个问题,但是我认为您没有其他选择可以使用 preventDefault 取消鼠标滚轮。 IE 仅在光标悬停在元素上时才会触发鼠标滚轮,无论是否聚焦。
标签: javascript html jquery dom-events stoppropagation