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

如何基于jqGrid中Revenue Stream选择动态隐藏Licensing下拉选项?

jqGrid动态过滤下拉列选项实现思路

现有两个jqGrid网格,第一个网格选中值后,第二个#GridSelectedProducts网格会加载对应数据并设置为单元格可编辑状态。其中Revenue-Stream和Licensing为下拉类型列,需求是根据Revenue-Stream的选中值,动态隐藏Licensing下拉列表中的特定选项。

实现步骤


1. 完善下拉列的colModel配置

确保SelectedProductsModel中两个下拉列配置edittype: 'select',并给Revenue-Stream添加change事件监听:

// SelectedProductsModel中对应列的配置示例
[
    // ...其他列配置
    {
        name: 'Revenue-Stream',
        index: 'Revenue-Stream',
        edittype: 'select',
        editoptions: {
            value: 'Subscription:Subscription;One-Time:One-Time', // 替换为你的实际选项值
            dataEvents: [
                {
                    type: 'change',
                    fn: function(e) {
                        // 触发下拉值变化后的过滤逻辑
                        handleRevenueFilter(e, $(this).closest('tr.jqgrow').attr('id'));
                    }
                }
            ]
        }
    },
    {
        name: 'Licensing',
        index: 'Licensing',
        edittype: 'select',
        editoptions: {
            value: 'Per-User:Per-User;Per-Device:Per-Device;Site-License:Site-License' // 替换为你的实际选项值
        }
    }
    // ...其他列配置
]

2. 编写下拉过滤核心函数

定义handleRevenueFilter函数,保存原始选项并根据选中值过滤Licensing下拉:

function handleRevenueFilter(e, rowId) {
    const selectedRevenue = $(e.target).val();
    // 获取当前行的Licensing下拉控件(jqGrid单元格ID格式:行ID_列name)
    const licensingSelect = $('#' + rowId + '_Licensing');

    // 首次进入时保存所有原始选项,避免重复加载
    if (!licensingSelect.data('originalOptions')) {
        licensingSelect.data('originalOptions', licensingSelect.html());
    }

    // 根据选中的Revenue值过滤选项
    let filteredOptions = licensingSelect.data('originalOptions');
    if (selectedRevenue === 'Subscription') {
        // 保留指定选项,可根据需求调整过滤条件
        filteredOptions = $(licensingSelect.data('originalOptions'))
            .filter('option[value="Per-User"], option[value="Per-Device"]')
            .prop('outerHTML')
            .join('');
    } else if (selectedRevenue === 'One-Time') {
        filteredOptions = $(licensingSelect.data('originalOptions'))
            .filter('option[value="Site-License"]')
            .prop('outerHTML')
            .join('');
    }

    // 更新下拉列表
    licensingSelect.html(filteredOptions);
}

3. 处理单元格编辑时的选项同步

由于jqGrid的cellEdit模式下,每次进入编辑状态会重新渲染下拉控件,需要在beforeEditCell事件中重新应用过滤逻辑:

// 修改#GridSelectedProducts的初始化配置,添加beforeEditCell事件
jQuery("#GridSelectedProducts").jqGrid({
    // 原有配置...
    beforeEditCell: function(rowid, cellname, value, iRow, iCol) {
        // 当编辑Licensing列时,同步过滤选项
        if (cellname === 'Licensing') {
            const revenueValue = jQuery(this).jqGrid('getCell', rowid, 'Revenue-Stream');
            const licensingSelect = $('#' + rowid + '_Licensing');
            
            if (revenueValue && licensingSelect.data('originalOptions')) {
                // 复用过滤逻辑
                let filteredOptions = licensingSelect.data('originalOptions');
                if (revenueValue === 'Subscription') {
                    filteredOptions = $(licensingSelect.data('originalOptions'))
                        .filter('option[value="Per-User"], option[value="Per-Device"]')
                        .prop('outerHTML')
                        .join('');
                } else if (revenueValue === 'One-Time') {
                    filteredOptions = $(licensingSelect.data('originalOptions'))
                        .filter('option[value="Site-License"]')
                        .prop('outerHTML')
                        .join('');
                }
                licensingSelect.html(filteredOptions);
            }
        }
    },
    // 原有配置...
}).navGrid('#pager10_d', {
    add: false,
    edit: false,
    del: true,
    refresh: false
});

4. 关键注意事项

  • 确保colModel中列的name属性与代码中引用的名称完全一致(比如Revenue-Stream)
  • 如果Licensing的选项是从服务器动态加载的,需在加载完成后调用一次过滤逻辑保存原始选项
  • 可根据实际业务需求调整过滤条件中的选项值和判断逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 03:37:04