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

Tagify whitelist配置:如何实现同名Discord角色与对应唯一ID绑定

解决方案

Tagify 的 whitelist 参数本身支持传入对象数组,无需拆分角色ID和名称到两个独立数组,可通过字段配置直接实现二者绑定,修改方案如下:

1. 核心配置思路

通过 Tagify 内置的 valueKey、labelKey 配置项指定ID、名称对应的字段,选中标签时会自动保留完整的角色对象属性:

  • valueKey:设置为 id,作为标签的唯一标识值
  • labelKey:设置为 name,作为下拉列表和标签上显示给用户的文本

该方案原生兼容Discord角色重名的场景,唯一ID会全程和角色名称绑定,不会出现匹配错误的问题

2. 完整修改后的代码

<script>
    var input = document.querySelector('input[name=tags-outside]');
    // 直接使用服务端返回的原始角色数组,无需拆分
    const guildRoles = {{ guild_roles|tojson }};
    
    new Tagify(input, {
        whitelist: guildRoles,
        userInput: false,
        // 配置字段映射
        valueKey: 'id',
        labelKey: 'name',
        // (可选)自定义下拉列表项渲染,重名时展示ID后4位方便用户区分
        dropdown: {
            mapValueTo: 'name',
            renderItem: (item) => `<div>${item.name} <span style="color:#999;font-size:12px">(${item.id.slice(-4)})</span></div>`
        }
    })
</script>

3. 获取选中的角色ID

用户选择完成后,可通过以下方式拿到所有选中角色的ID:

// 假设tagify是初始化得到的实例
const selectedRoleIds = tagify.value.map(item => item.id)

如果需要实时监听选择变化,可绑定change事件:

tagify.on('change', (e) => {
    const currentSelectedIds = e.detail.tagify.value.map(item => item.id)
    // 此处处理选中ID的业务逻辑
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 18:18:03