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

CSS+JS实现选中值>10时显示输入框的select dropdown组件

带自定义输入框的下拉选择组件实现参考

别硬改原生select/option的默认渲染,浏览器对原生下拉面板的自定义权限限制非常多,插输入框这类需求直接用div模拟下拉交互是成本最低、坑最少的方案,核心逻辑非常简单,给你拆成可直接复用的最小实现:

核心实现逻辑

  • 用容器+触发器+下拉面板的结构模拟原生select的外观和交互,选项用列表渲染,不要依赖原生option
  • 给每个选项绑定对应的数值,监听选中事件,判断选中值是否大于10,控制输入框的显示/隐藏
  • 补全和原生select一致的基础交互:点击外部收起、键盘操作支持、选中态高亮即可

最小可运行代码示例

<style>
.custom-select {
  position: relative;
  width: 200px;
  font-size: 14px;
}
.select-trigger {
  border: 1px solid #dcdfe6;
  border-radius: 4px;
  padding: 8px 12px;
  cursor: pointer;
  background: #fff;
}
.select-dropdown {
  display: none;
  position: absolute;
  top: 110%;
  left: 0;
  width: 100%;
  border: 1px solid #dcdfe6;
  border-radius: 4px;
  background: #fff;
  box-shadow: 0 2px 12px rgba(0,0,0,0.1);
  z-index: 10;
}
.select-dropdown.show {
  display: block;
}
.option-list {
  list-style: none;
  margin: 0;
  padding: 4px 0;
}
.option-item {
  padding: 8px 12px;
  cursor: pointer;
}
.option-item:hover {
  background: #f5f7fa;
}
.custom-input-wrap {
  padding: 8px 12px;
  border-top: 1px solid #eee;
}
.custom-num-input {
  width: 100%;
  box-sizing: border-box;
  padding: 6px 8px;
  border: 1px solid #dcdfe6;
  border-radius: 4px;
}
</style>

<div class="custom-select">
  <div class="select-trigger">请选择数值</div>
  <div class="select-dropdown">
    <ul class="option-list">
      <li class="option-item" data-value="1">1</li>
      <li class="option-item" data-value="2">2</li>
      <li class="option-item" data-value="3">3</li>
      <li class="option-item" data-value="4">4</li>
      <li class="option-item" data-value="5">5</li>
      <li class="option-item" data-value="6">6</li>
      <li class="option-item" data-value="7">7</li>
      <li class="option-item" data-value="8">8</li>
      <li class="option-item" data-value="9">9</li>
      <li class="option-item" data-value="10">10</li>
      <li class="option-item" data-value="11">自定义数值</li>
    </ul>
    <div class="custom-input-wrap" style="display: none;">
      <input type="number" class="custom-num-input" placeholder="请输入期望数值" min="11">
    </div>
  </div>
</div>

<script>
const trigger = document.querySelector('.select-trigger')
const dropdown = document.querySelector('.select-dropdown')
const options = document.querySelectorAll('.option-item')
const inputWrap = document.querySelector('.custom-input-wrap')
const numInput = document.querySelector('.custom-num-input')

// 展开/收起下拉
trigger.addEventListener('click', (e) => {
  e.stopPropagation()
  dropdown.classList.toggle('show')
})

// 选项选中逻辑
options.forEach(item => {
  item.addEventListener('click', (e) => {
    e.stopPropagation()
    const val = Number(item.dataset.value)
    trigger.textContent = val > 10 ? '自定义' : val
    // 核心判断:选中值大于10时显示输入框
    inputWrap.style.display = val > 10 ? 'block' : 'none'
    if (val > 10) {
      numInput.focus()
    } else {
      numInput.value = ''
    }
    dropdown.classList.remove('show')
  })
})

// 点击组件外部收起下拉
document.addEventListener('click', () => {
  dropdown.classList.remove('show')
})
</script>

补充说明

  • 如果是用React/Vue等框架开发,逻辑完全一致,只需要把显示隐藏的控制换成框架的响应式状态即可,不需要引入额外的第三方组件库
  • 可以按需补充键盘上下键切换选项、回车选中、ESC收起的交互,对齐原生select的使用体验
  • 自定义输入框建议加上数值合法性校验,提交表单时优先取输入框内的有效值即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.09 16:15:44