Javascript 停止播放而不阻止默认播放

Javascript 停止播放而不阻止默认播放,javascript,html,jquery,dom-events,stoppropagation,Javascript,Html,Jquery,Dom Events,Stoppropagation,是否可以在不阻止默认事件行为的情况下停止事件传播 这应该可以让输入在滚动时递增/递减,但可以阻止它冒泡到任何其他元素并滚动外部div(我认为以下仅限于Chrome) $(“输入[type=number]”)。在(“鼠标滚轮”上,函数(e){//我认为只适用于chrome e、 停止传播(); console.log(“滚动”); }); div{ 高度:50px; 溢出:自动; 边框:1px纯黑; } 因此,我认为,默认的替代方案是唯一能使这项工作起作用的方案 我曾想过这个选择,但基本上是一样

是否可以在不阻止默认事件行为的情况下停止事件传播

这应该可以让输入在滚动时递增/递减,但可以阻止它冒泡到任何其他元素并滚动外部div(我认为以下仅限于Chrome)

$(“输入[type=number]”)。在(“鼠标滚轮”上,函数(e){//我认为只适用于chrome
e、 停止传播();
console.log(“滚动”);
});
div{
高度:50px;
溢出:自动;
边框:1px纯黑;
}

因此,我认为,默认的替代方案是唯一能使这项工作起作用的方案

我曾想过这个选择,但基本上是一样的。它在div上设置控制盘事件,并在检测到输入时取消该事件

$("body > div").on("mousewheel",function(e){
    if (e.target && e.target.tagName == "INPUT")
        {

        var currentVal = $(e.target).val() === "" ? 0:parseInt($(e.target).val(),10);
        var step = $(e.target).attr("step") || 1;
        //should have some min/max handling to be complete
        if(e.originalEvent.wheelDelta > 0){
            $(e.target).val(currentVal+parseInt(step,10));
        }else{
            $(e.target).val(currentVal-parseInt(step,10));
        }
            e.preventDefault();
    }
});

一种可能的解决方法是在鼠标悬停在输入上时临时修复输入:

$(“输入[type=number]”)。在(“鼠标滚轮”上,函数(e){
e、 停止传播();
}).on(“mouseenter”,function(){
$(this.css(“位置”,“固定”);
}).on(“mouseleave”,函数(){
$(this.css(“位置“,”);
});
div{
高度:50px;
溢出:自动;
边框:1px纯黑;
}


您不能阻止滚动?您的标题和问题是对立的。您想做什么:在不停止事件传播的情况下阻止默认值,还是在不阻止默认值的情况下停止事件传播?@adeneo-ohreal
document.body.addEventListener('mousewheel',函数(e){e.preventDefault();})
@meagar oops,已更正。我喜欢这个问题,但我认为您没有其他方法可以使用preventDefault取消mousewheel。IE仅在光标位于元素上时触发鼠标滚轮,无论是否聚焦。这符合标准。我不喜欢使用mouseenter事件处理这类事情,但这是我见过的最不粗糙的方法。@SlicedLoad:是的,这并不理想,也许聚焦/模糊更合适。