javascript - 防止 var 值(选定的选项)在窗口滚动时发生变化

标签 javascript scroll onchange addeventlistener

获取选定的选项值并将其传递给函数。但是,请注意窗口滚动时值的更改并返回所有先前选择的值。

请参阅 codepen 处的代码 检查控制台。

重现问题

  1. 在下拉菜单中,选择 2018 并滚动。在控制台中,如预期的行为返回
"change: 2018"
"init: 2018"
"scroll: 2018"
  1. 清除控制台。更改为 2019 并滚动。在控制台中,返回“2018”“2019”的循环。预期行为仅限“2019”。
"change: 2019"
"init: 2019"
"scroll: 2018"
"scroll: 2019"
"scroll: 2018"
"scroll: 2019"
(function () {
  document.addEventListener('DOMContentLoaded', function () {
    var select = document.querySelector('select')

    // Register click event listener for select element
    select.addEventListener('change', handleLibsynSelectChange, true)

    // Handle select change
    function handleLibsynSelectChange(e) {
      var year = e.target.value
      console.log('change: ' + year)
      handleLibsynInit(year)
    }

    function handleLibsynInit(libsynFilterYear) {
      console.log('init: ' + libsynFilterYear)
      window.addEventListener('scroll', function() {
        console.log('scroll: ' + libsynFilterYear)
        // other functions to execute on window scroll which need the var libsynFilterYear
      })
    }
  })
})()

最佳答案

关于这条评论:

如何将所选值从更改处理程序传递到滚动处理程序?

只需在“更改”事件监听器中获取选定的值。

(function () {
  document.addEventListener('DOMContentLoaded', function () {
    var select = document.querySelector('select');
    var yearSelected = -1;
    // Register click event listener for select element
    select.addEventListener('change', handleLibsynSelectChange, true);
    // Handle select change
    function handleLibsynSelectChange(e) {
      yearSelected = e.target.value
    };
    var listener = function () {
      console.dir('scroll : ' + yearSelected);
    };
    window.addEventListener('scroll',listener);
  });
})()

关于javascript - 防止 var 值(选定的选项)在窗口滚动时发生变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57445025/

相关文章:

javascript - 如果服务不可用,gapi.client 是否应该优雅地失败?

CSS 页面滚动

javascript - 为一个 div 启用滚动,但为另一个 div 锁定它

javascript - 将动画添加到滚动时的 css 更改

jquery - 在输入更改时查找最接近的元素并显示工具提示

Jquery .map().join (", ") 文本未加入逗号 (,)

javascript - Angular2 返回的 Div 高度不正确

javascript - 如何在动态生成的元素上触发事件(在mootools中)

javascript - 为 jQuery 中的现有类添加值

python - 如何在 odoo 中将 Onchange 与日期字段一起使用?