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

如何在formio.js中无需外部源,根据其他选择框过滤下拉选项?

在Formio.js中无需外部源实现选择框选项过滤

完全可行,你可以通过两种方式实现基于表单内其他选择框值的本地选项过滤:

方法一:利用组件自定义数据函数

这种方式直接在选择框的配置中嵌入逻辑,无需额外代码:

  1. 假设你有两个选择框:
    • 第一个选择框key设为category,选项为["电子产品", "服装", "食品"]
    • 第二个选择框key设为product,需要根据category的选中值过滤预定义选项
  2. 编辑product选择框的配置,切换到Data选项卡:
    • 将Data Source改为Custom
    • 在Custom Data中输入以下函数(替换成你的实际选项数据):
      function() {
        const selectedCategory = this.data.category;
        // 预定义的完整选项列表,每个选项带分类标识
        const allItems = [
          { label: "手机", value: "phone", category: "电子产品" },
          { label: "T恤", value: "t-shirt", category: "服装" },
          { label: "苹果", value: "apple", category: "食品" },
          { label: "电脑", value: "computer", category: "电子产品" },
          { label: "裤子", value: "pants", category: "服装" }
        ];
        // 过滤返回匹配分类的选项,无选中值时返回全部
        return selectedCategory ? allItems.filter(item => item.category === selectedCategory) : allItems;
      }
      
  3. 保存配置后,当category的选中值变化时,product的选项会自动更新。

方法二:监听表单change事件动态更新选项

这种方式适合更复杂的过滤逻辑,需要在表单渲染后添加代码:

  1. 获取表单实例后,添加事件监听:
    // 假设formioForm是你的表单实例
    formioForm.on('change', (changedComp) => {
      // 仅在category选择框变化时执行
      if (changedComp.key === 'category') {
        const selectedCat = formioForm.data.category;
        const productComp = formioForm.getComponent('product');
        // 预定义完整选项
        const allItems = [
          { label: "手机", value: "phone", category: "电子产品" },
          { label: "T恤", value: "t-shirt", category: "服装" },
          { label: "苹果", value: "apple", category: "食品" },
          { label: "电脑", value: "computer", category: "电子产品" },
          { label: "裤子", value: "pants", category: "服装" }
        ];
        // 过滤选项
        const filteredItems = selectedCat ? allItems.filter(item => item.category === selectedCat) : allItems;
        // 更新选择框选项,可选清空当前选中值
        productComp.updateValue(null);
        productComp.setOptions(filteredItems);
      }
    });
    

注意事项

  • 确保两个选择框的key配置正确,否则无法正确获取数据或组件实例
  • 自定义数据函数中,this指向当前表单实例,可通过this.data访问所有表单字段值
  • 若需要多条件过滤,只需扩展过滤逻辑即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 22:55:24