【问题标题】:Usage of jQuery UI Multiselect within jqGrid在 jqGrid 中使用 jQuery UI Multiselect
【发布时间】:2026-02-06 15:20:08
【问题描述】:

我正在尝试使用 jQuery 插件 UI Multiselect。 UI Multiselect 的调用经过$(".multiselect").multiselect(); 问题是这个调用应该放在 jqgrid 配置中的什么位置?这应该在 OnSelectRow 内完成吗?目前我在 OnSelectRow 中有以下调用/定义:

    function (rowid) {
       grid.setColProp('available_film_id',{
       editoptions:{
       dataInit:function (el){$(el).addClass('multiselect')},
       size:5,
       multiple:true,
       dataUrl:'/ajax/selectlist/?q=getSelected&value='+rowid}});
    }
}

【问题讨论】:

    标签: jquery-plugins jqgrid


    【解决方案1】:

    我不确定,但我想你会在这里引用answer by Byron 得到答案。

    如果需要更多demo,可以看here

    【讨论】:

    • 谢谢,但它看起来完全是另一种解决方案。不是我上面说的那个插件。
    【解决方案2】:

    您可以在dataInit 函数中调用mutliselect

    dataInit: function (el) { setTimeout(function () { $(el).multiselect(); }, 50); }
    

    创建元素时会调用该函数。

    更新

    Multiselect 插件的当前版本似乎需要元素在 DOM 中的位置。此事件在将元素插入 DOM 之前引发,因此需要使用 setTimeout 函数来完成所需的操作。

    【讨论】:

    • 听起来不错,但在我的设置中不起作用。你已经用过这个插件(UI Multiselect)了吗?
    • @Anatoliy 是的,很多次。在这种情况下,您需要提供更多设置细节,因为通用代码是正确的。
    • @Anatoliy 我已经更新了 DOM 插入方面的答案。
    • 那么这是一种竞争条件吗?您是否依赖浏览器在 50 毫秒或更短的时间内将元素放入 DOM?
    • @user1334007 通常,许多 jQuery UI 组件依赖于元素在 DOM 中的存在。根据浏览器的实现,这通常会影响元素的计算位置。