【问题标题】:addListener is deprecated. What's the alternative?addListener 已弃用。有什么选择?
【发布时间】:2021-07-09 08:28:14
【问题描述】:

当屏幕宽度为 1200 像素或更小时,我有一个简单的 JS 代码可以将 HTML 元素从一个 div 移动到另一个。它运行良好,但 addListener 事件处理程序在 VSC 中被划掉,我收到警告说它已被弃用。我应该如何更改代码以避免该警告?

$(document).ready(function(){
  var x = window.matchMedia("(max-width: 1200px)");
  
  function move(x) {
      if (x.matches) {
        $('.menu').insertBefore($('.popup ul'));
      }

      else {
        $('.menu').insertAfter($('.logo'));
      }
  }

  move(x);
  x.addListener(move);
});

【问题讨论】:

标签: javascript html jquery events media-queries


【解决方案1】:

使用change 事件转换为addEventListener。您需要从 event 参数中提取目标以将其传递给 move()

$(document).ready(function() {
  var x = window.matchMedia("(max-width: 1200px)");

  function move(x) {
    if (x.matches) {
      $('.menu').insertBefore($('.popup ul'));
    } else {
      $('.menu').insertAfter($('.logo'));
    }
  }

  move(x);
  x.addEventListener('change', function(event) {
    move(event.target);
  });
});

【讨论】:

  • 您也可以使用x.addEventListener('change', move) 并使用if (this.matches) .... 当然,move(x) 将是move.call(x) - 猜你的更好:p
  • @Bravo 这也行。但是move.call(x) 有点晦涩。
  • 他也可以直接去掉x参数,把它称为闭包变量。
  • @Barmar 我是女的哈哈
  • "您需要从事件参数中提取目标以将其传递给 move()。", event.target === x 使用此代码,最好的方法是去掉 x 中的参数function move(x) {.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-10-21
  • 1970-01-01
  • 2021-06-07
  • 2021-05-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多