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

如何为jQuery UI Autocomplete自定义渲染项赋值?是否有其他方法?

为jQuery UI自定义Selectmenu元素赋值的其他实现方式

你当前的实现是通过监听change事件直接修改类选择器匹配的元素内容,以下是几种更贴合jQuery UI组件设计的替代实现方式:

方式一:通过组件widget()方法精准定位显示容器

jQuery UI Selectmenu的widget()方法会返回生成的按钮容器,可直接定位内部文本元素修改,避免全局类选择器的潜在冲突:

$('#people').on('change', function() {
  const selectedValue = $(this).val();
  // 通过widget()获取组件按钮容器,修改显示文本
  $(this).iconselectmenu('widget').find('.ui-selectmenu-text').text(selectedValue);
}).change();

方式二:在自定义组件内部扩展_select方法

既然自定义了iconselectmenu组件,可直接在组件内部扩展_select方法,选中项时自动更新显示内容,逻辑更内聚:

$.widget("custom.iconselectmenu", $.ui.selectmenu, {
  _renderItem: function(ul, item) {
    const li = $("<li>"),
          wrapper = $("<div>", { text: item.label });
    if (item.disabled) {
      li.addClass("ui-state-disabled");
    }
    if (item.value == 1) {
      $("<img src='../img/web.png' />").appendTo(wrapper);
    }
    return li.append(wrapper).appendTo(ul);
  },
  // 扩展_select方法,继承原有逻辑同时更新显示
  _select: function(event, ui) {
    this._super(event, ui);
    this.widget().find('.ui-selectmenu-text').text(ui.item.value);
  }
});

$("#people").iconselectmenu().iconselectmenu("menuWidget").addClass("ui-menu-icons avatar");

这种方式无需额外绑定全局change事件,组件自身即可处理赋值逻辑。

方式三:结合val()与refresh()同步赋值

如果需要在外部触发赋值(比如初始化设置默认值),可通过val()设置值后调用refresh()让组件同步显示,再按需修改内容:

// 初始化设置默认值并同步组件状态
$("#people").val("1").iconselectmenu("refresh");

// 自定义显示内容
$('#people').iconselectmenu('widget').find('.ui-selectmenu-text').text("自定义内容");

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 15:45:42