增强下拉框模块(customSelect.ts)

模块路径:web_rviz/src/customSelect.ts

用途

在保留原生 select 作为真实数据源的前提下,为其包上一层可定制样式、支持键盘操作的增强下拉框。

公开接口

CustomSelectController

  • refresh():根据当前原生 select 状态重建自定义选项列表。

  • dispose():移除增强包装,并把原始 select 原位恢复。

enhanceSelect(select: HTMLSelectElement): CustomSelectController

增强一个 select 元素并返回其控制器。

refreshEnhancedSelect(select: HTMLSelectElement): void

如果该 select 已经增强,则刷新对应的自定义菜单内容。

行为说明

  • 目标 select 必须已经挂载到某个父元素下。

  • 每个 select 最多只会创建一个控制器;重复调用 enhanceSelect() 会复用现有实例。

  • 内部使用 MutationObserver 监听选项变化和禁用状态变化,保证自定义菜单与原生控件同步。

  • 点击组件外部区域或按下 Escape 会关闭所有已展开的增强下拉框。

  • 选择新选项时会同步更新原生值,并派发一个冒泡的 change 事件。