You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Materialize CSS下拉框在IE11中点击滚动条自动关闭问题求助

解决Materialize Select在IE11中点击滚动条关闭下拉的问题

我之前在维护兼容IE11的项目时刚好碰到过这个问题,这确实不是Materialize独有的锅,本质是IE11对DOM事件的处理逻辑和现代浏览器不一样导致的。

问题根源

Materialize的下拉组件(包括select对应的下拉)是通过监听document上的点击事件来实现点击外部关闭下拉的逻辑。但在IE11里,点击下拉框的滚动条时,这个点击事件会被错误地识别为“外部点击”,冒泡到document上触发关闭;而Chrome、Firefox这些现代浏览器会正确判断滚动条属于下拉容器内部,不会触发外部关闭逻辑。

实测有效的解决方案

方案一:阻止滚动条点击事件冒泡

通过在捕获阶段监听点击事件,判断点击位置是否属于下拉滚动条区域,若是则阻止事件冒泡,避免触发document层面的关闭逻辑:

// 检测是否是IE11
const isIE11 = navigator.userAgent.indexOf('Trident/7.0') !== -1;

if (isIE11) {
  // 使用捕获阶段监听document点击
  document.addEventListener('click', function(e) {
    // 找到点击元素所属的下拉容器
    const dropdownContent = e.target.closest('.dropdown-content');
    if (!dropdownContent) return;

    // 判断下拉容器是否有滚动条
    const hasScrollbar = dropdownContent.scrollHeight > dropdownContent.clientHeight;
    if (!hasScrollbar) return;

    // 判断点击的是滚动条区域(横向滚动条同理,这里只处理纵向)
    const isVerticalScrollbarClick = e.clientX >= dropdownContent.offsetLeft + dropdownContent.clientWidth;
    
    if (isVerticalScrollbarClick) {
      e.stopPropagation(); // 阻止事件冒泡到document
    }
  }, true);
}

方案二:重写Materialize的下拉关闭方法

如果方案一不生效,可以直接修改Materialize内置的下拉关闭逻辑,给IE11添加特殊判断:

const isIE11 = navigator.userAgent.indexOf('Trident/7.0') !== -1;

if (isIE11) {
  // 保存原始的close方法
  const originalDropdownClose = M.Dropdown.prototype.close;
  
  // 重写close方法
  M.Dropdown.prototype.close = function(e) {
    const dropdownContent = this.el.nextElementSibling;
    // 判断是否是点击下拉滚动条
    const isScrollbarClick = dropdownContent && e.target.closest('.dropdown-content') && 
      e.clientX >= dropdownContent.offsetLeft + dropdownContent.clientWidth;
    
    if (isScrollbarClick) {
      return; // 不执行关闭操作
    }
    // 调用原始方法
    originalDropdownClose.call(this, e);
  };
}

额外提示

  • 如果你用的是较旧版本的Materialize,可以尝试升级到最新的稳定版(虽然官方已经停止对IE11的维护,但部分版本可能修复了这类基础兼容问题);
  • 如果场景允许,也可以给下拉容器设置一个足够的固定高度,减少滚动条出现的概率,这算是一个临时的规避方案。

内容的提问来源于stack exchange,提问作者RPM

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:04:13