简体   繁体   English

无法在被动事件侦听器中阻止默认值

[英]Unable to preventDefault inside passive event listener

I'm using Framework7 sortable list and it works well, just that it doesn't trigger an event when the list is changed.我正在使用Framework7 可排序列表,它运行良好,只是在列表更改时它不会触发事件。

So I'm trying a few built-in events:所以我正在尝试一些内置事件:

$('.sortable-handler').on('touchstart', function (e) {
    e.preventDefault();
    alert('touchstart');
});

$('.sortable-handler').on('touchmove', function (e) {
    e.preventDefault();
    console.log('touchmove');
});

$('.sortable-handler').on('touchcancel', function (e) {
    e.preventDefault();
    console.log('touchcancel');
});

$('.sortable-handler').mouseleave(function (e) {
    e.preventDefault();
    console.log('mouseleave');
});

.. but all I get is: ..但我得到的只是:

Unable to preventDefault inside passive event listener due to target being treated as passive.由于目标被视为被动,无法在被动事件侦听器中阻止默认值。 See https://www.chromestatus.com/features/5093566007214080https://www.chromestatus.com/features/5093566007214080

Which event should I look for to get the updated list on every sort?我应该寻找哪个事件来获取每种类型的更新列表?

See this blog post .请参阅此博客文章 If you call preventDefault on every touchstart then you should also have a CSS rule to disable touch scrolling like如果你在每次touchstart上调用preventDefault那么你还应该有一个 CSS 规则来禁用触摸滚动,比如

.sortable-handler {
  touch-action: none;
}

For me为了我

document.addEventListener("mousewheel", this.mousewheel.bind(this), { passive: false });

did the trick (the { passive: false } part).成功了( { passive: false }部分)。

In plain JS add { passive: false } as third argument在普通 JS 中添加{ passive: false }作为第三个参数

document.addEventListener('wheel', function(e) {
    e.preventDefault();
    doStuff(e);
}, { passive: false });

To handle sortable list in Framework7 when user release currently sorting element in new position, you can use this code:要在用户在新位置释放当前排序元素时处理 Framework7 中的可排序列表,您可以使用以下代码:

  $$('li').on('sortable:sort',function(event){
    alert("From " + event.detail.startIndex + " to " + event.detail.newIndex);
  });

Fiddle : https://jsfiddle.net/0zf5w4y7/小提琴: https : //jsfiddle.net/0zf5w4y7/

I am getting this issue when using owl carousal and scrolling the images.我在使用 owl carousal 和滚动图像时遇到了这个问题。

So get solved just adding below CSS in your page.因此,只需在页面中添加以下 CSS 即可解决。

.owl-carousel {
-ms-touch-action: pan-y;
touch-action: pan-y;
}

or或者

.owl-carousel {
-ms-touch-action: none;
touch-action: none;
}

仍然能够滚动这对我有用

if (e.changedTouches.length > 1) e.preventDefault();

Adding to Rick Buyers' answer添加到里克买家的答案

See this blog post.请参阅此博客文章。 If you call preventDefault on every touchstart then you should also have a CSS rule to disable touch scrolling like如果你在每次 touchstart 上调用 preventDefault 那么你还应该有一个 CSS 规则来禁用触摸滚动,比如

.sortable-handler {
  touch-action: none;
}

here is how to do it in Javascript:以下是如何在 Javascript 中执行此操作:

handlerList = document.getElementsByClassName("sortable-handler");
for (var i=0, len=handlerList.length|0; i<len; i=i+1|0) {
    handlerList[i].style.style.touchAction = "none";
}

just do a check before call preventDefault在调用preventDefault之前做一个检查

event.cancelable && event.preventDefault()

that's it!就是这样!

More:更多的:

touchstart & touchmove default passive true due to perfomance, at most cases, you don't need to change that default optimize.由于性能原因, touchstarttouchmove默认被动为true ,在大多数情况下,您不需要更改默认优化。

I worked out a different solution for my code.我为我的代码制定了不同的解决方案。 I needed to disable the passive property for the touchend event.我需要禁用 touchend 事件的被动属性。 I was using jquery 3.5.我正在使用 jquery 3.5。 You can try the below code:你可以试试下面的代码:

jQuery.event.special.touchstart = {
        setup: function (_, ns, handle) {
            this.addEventListener('touchend', handle, { passive: !ns.includes('noPreventDefault') });
        }
    };

here is my solution for react.这是我的反应解决方案。 this is for silly react number textfield scrolling problem which causes number change while moving with wheel.这是针对愚蠢的反应数字文本字段滚动问题,该问题会在使用滚轮移动时导致数字变化。 when you try to preventDefault onWheel property you get " unable to prevent default inside passive event listener " error.当您尝试 preventDefault onWheel 属性时,您会得到“无法阻止被动事件侦听器中的默认值”错误。 Here we add event listener in creation.这里我们在创建中添加事件监听器。

export default function CustomTextField({ ...other }) {
  const ref = useRef(null);

  useEffect(() => {
    const element = ref.current;

    let isNumber = element.querySelector('input').type === 'number'
    if (isNumber) {
      element.addEventListener("wheel", handleWheel);
    }
  }, []);

  const handleWheel = (event) => {
    event.stopPropagation();
  };

  return (
        <TextField
          {...field}
          ref={ref}
          fullWidth
          value={typeof field.value === 'number' && field.value === 0 ? '' : field.value}
          error={!!error}
          helperText={error?.message}
          {...other}
        />

  );
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 无法阻止被动事件侦听器调用中的默认设置 - Unable to preventDefault inside passive event listener invocation 无法在被动事件侦听器中阻止默认值 - Swipebox Mobie - Unable to preventDefault inside passive event listener - Swipebox Mobie react-datepicker“无法在被动事件侦听器调用中阻止Default” - react-datepicker “Unable to preventDefault inside passive event listener invocation” 事件在鼠标悬停之前触发,并且由于目标被视为被动而无法在被动事件侦听器中阻止默认值 - event fires before mouseover and Unable to preventDefault inside passive event listener due to target being treated as passive .wheel 事件 | 由于目标被视为被动,无法在被动事件侦听器中阻止默认值 - .wheel event | Unable to preventDefault inside passive event listener due to target being treated as passive 由于目标被视为被动,无法在被动事件侦听器中阻止默认值。 Three.js 轨迹球控制 - Unable to preventDefault inside passive event listener due to target being treated as passive. Three.js TrackballControls 由于目标被视为被动,因此无法阻止被动Konva事件侦听器内的默认 - Unable to preventDefault inside passive Konva event listener due to target being treated as passive 由于目标被视为被动,无法在被动事件侦听器中阻止默认 - Chrome - Unable to preventDefault inside passive event listener due to target being treated as passive - Chrome ReactJS 输入范围错误无法阻止被动事件侦听器调用中的默认值 - ReactJS Input Range error Unable to preventDefault inside passive event listener invocation 在 Chrome 和 OpenLayers 2 中防止“无法在被动事件侦听器中阻止默认”错误 - Preventing 'Unable to preventDefault inside passive event listener' error within Chrome & OpenLayers 2
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM