我使用了以下代码,并开始得到以下提到的错误,该代码有什么问题,及其解决方法是什么。
由于目标被视为被动,因此无法阻止被动事件侦听器中的Default。参见https://www.chromestatus.com/features/6662647093133312
<script>
jQuery(window).scroll(function() {
if (jQuery(this).scrollTop() > 400) {
jQuery('.headerN').css("width", "100%");
jQuery('.headerN').slideDown();
} else {
jQuery('.headerN').slideUp();
}
});
</script>
答案 0 :(得分:0)
在JQuery中,这仍然是一个未解决的问题:https://github.com/jquery/jquery/issues/2871
您可以在事件中使用Vanilla js进行此操作:
el.addEventListener('someEvent', someFn, { passive: false });
这是上面提到的github线程上的某人如何创建他们实施的解决方法:
jQuery.event.special.touchstart = {
setup: function( _, ns, handle ){
if ( ns.includes("noPreventDefault") ) {
this.addEventListener("touchstart", handle, { passive: false });
} else {
this.addEventListener("touchstart", handle, { passive: true });
}
}
};
答案 1 :(得分:0)
我不是在回答最初的问题,但我正在添加我使用的解决方案并解决了这个问题“由于目标被视为被动而无法防止被动事件侦听器内的默认”。
为什么会在 jquery 中出现这种情况?
(S.Event.prototype = {
constructor: S.Event,
isDefaultPrevented: Ee,
isPropagationStopped: Ee,
isImmediatePropagationStopped: Ee,
isSimulated: !1,
preventDefault: function () {
var e = this.originalEvent;
(this.isDefaultPrevented = Ce), e && !this.isSimulated && **e.preventDefault();**
},
stopPropagation: function () {
var e = this.originalEvent;
(this.isPropagationStopped = Ce), e && !this.isSimulated && e.stopPropagation();
},
stopImmediatePropagation: function () {
var e = this.originalEvent;
(this.isImmediatePropagationStopped = Ce), e && !this.isSimulated && e.stopImmediatePropagation(), this.stopPropagation();
},
}),
我从 jquery-3.5.js 库中获取了代码片段。粗体代码段会导致此问题,因为所述事件(您遇到问题的事件)是被动的,因此 jquery 无法阻止默认。
就我而言,当我尝试在 ipad 11> 中滚动下拉列表并从下拉列表中选择任何值(jquery 自动完成)时,它不允许我这样做。
解决方案
document.addEventListener('touchstart', function(event) {
jQuery('#'+event.target.id).trigger('click');
}, {passive: false}
这只是一种解决方法。因此,基本上,您必须手动触发事件,因为 jquery lib 阻止了默认行为。最重要的部分是将该事件标记为 {passive: false}