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

如何实现ul li模拟SELECT下拉功能,点击时select option值不为空

解决方案

问题原因

你当前代码的问题是第一个点击事件绑定了.selected-change下的所有li元素,包括用于触发下拉展开的.init节点。点击.init节点时,它没有data-val属性,所以会给select赋值为undefined,导致select的option变成空值。

修改方案

把第一个点击事件的触发范围限定到非.init的li节点即可,还可以额外加一层合法性校验,进一步避免空值情况,无需调整其他逻辑。
修改后的JS代码如下:

// 只给非.init的li绑定赋值逻辑
$('.selected-change li:not(.init)').click(function () {
  const selectVal = $(this).data('val');
  // 加校验,只有值存在且select有对应option时才赋值
  if(selectVal && $('#city option[value="'+selectVal+'"]').length) {
    $('#city').val(selectVal).trigger('change');
  }
});


$("ul").on("click", ".init", function() {
  $(this).closest("ul").children('li:not(.init)').toggle();
});

var allOptions = $("ul").children('li:not(.init)');
$("ul").on("click", "li:not(.init)", function() {
  allOptions.removeClass('selected');
  $(this).addClass('selected');
  $("ul").children('.init').html($(this).html());
  allOptions.toggle();
});

效果验证

改完之后点击顶部的Select按钮只会展开/收起下拉选项,不会修改select的取值;点击三个城市选项时会正确给select赋值,不会出现空值情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 17:15:05