jqgrid 在搜索模式中动态更改 "dropdown column select"
jqgrid dynamically change "dropdown column select" in search modal
我需要能够动态修改在 "div.searchFilter" > "td.columns" 中创建的下拉列表 "select.selectLabel" 的内容。我需要的是在用户 select 一些外部选项时添加或删除某些搜索列。
我知道这些 select 是基于 colModel 的,每次用户添加新的搜索规则时都会重新创建它们。因此很难通过 dataInit() 函数更改它们,因为每次添加新规则时我的更改都会丢失。即使我发现元素像...
dataInit: function(elem) {
$(elem).closest("td.data").siblings(".columns").find("select.selectLabel");
}
然后删除特定的 <option>
并添加新的,似乎没有效果。
我想知道是否有某种方法可以 "tell" 搜索面板新的 ColModel,但是
我不想更改网格,只更改搜索模式的列。
谢谢
(版本 freejqgrid 4.13)
编辑 1: 明确一点(Oleg 的评论)...
我正在使用 datatype=ajax (服务器数据)。
我有一个常规的 colModel,但我想将搜索面板下拉列表(组合框)修改为 add/remove 一些字段,而不是改变网格 colmodel。
我的意思是,add/remove 一些 <option>
(值和标签),并添加一些新的 "pseudo-fields",它们不在以前的 colModel 中。
我尝试了searchoptions.dataInit()函数来获取每一个新规则(这样我就可以达到相应的<select class="selectLabel">
),但是发现这个函数不太好用。
现在我正在尝试 searchoptions.afterRedraw() 但我不确定这是否对我有帮助。
编辑 2:
假设我有这个
colModel: [
{name:"country", label:"Country", search:true},
{name:"city", label:"City", search:true},
{name:"zip", label:"Zip Code", search:true}
]
当用户打开搜索模式时,他将添加一个新规则和 select 保管箱中的字段...
<select class="selectLabel">
<option value="country">Country</option>
<option value="city">City</option>
<option value="zip">Zip Code</option>
</select>
然后,用户单击一个外部按钮,这会触发一个事件,该事件将修改任何列下拉框(现在或将来),这应该是...
<select class="selectLabel">
<option value="country">Country</option>
<option value="city">City</option>
<option value="zip">Zip Code</option>
<option value="phone1">Phone 1</option> //dynamically added
<option value="phone2">Phone 2</option> //dynamically added
<option value="phone3">Phone 3</option> //dynamically added
//(and so on...)
</select>
这些新的伪字段(phone1、phone2 ...)不存在于 colModel 中,因为它们是由一些外部代码即时创建的。
你没有发布演示,我可以修改它。因此,我只描述您可以做什么。 jqGrid 的搜索对话框包含 columns
参数。搜索对话框包含基于选项的信息(如果存在)。如果该选项不存在,则将使用 colModel
的副本。因此,您可以使用您想要的任何信息动态填充 columns
,搜索对话框将包含它。查看 the old answer or in the demo 的代码示例,它使用 columns
参数。
我需要能够动态修改在 "div.searchFilter" > "td.columns" 中创建的下拉列表 "select.selectLabel" 的内容。我需要的是在用户 select 一些外部选项时添加或删除某些搜索列。
我知道这些 select 是基于 colModel 的,每次用户添加新的搜索规则时都会重新创建它们。因此很难通过 dataInit() 函数更改它们,因为每次添加新规则时我的更改都会丢失。即使我发现元素像...
dataInit: function(elem) {
$(elem).closest("td.data").siblings(".columns").find("select.selectLabel");
}
然后删除特定的 <option>
并添加新的,似乎没有效果。
我想知道是否有某种方法可以 "tell" 搜索面板新的 ColModel,但是
我不想更改网格,只更改搜索模式的列。
谢谢 (版本 freejqgrid 4.13)
编辑 1: 明确一点(Oleg 的评论)... 我正在使用 datatype=ajax (服务器数据)。
我有一个常规的 colModel,但我想将搜索面板下拉列表(组合框)修改为 add/remove 一些字段,而不是改变网格 colmodel。
我的意思是,add/remove 一些 <option>
(值和标签),并添加一些新的 "pseudo-fields",它们不在以前的 colModel 中。
我尝试了searchoptions.dataInit()函数来获取每一个新规则(这样我就可以达到相应的<select class="selectLabel">
),但是发现这个函数不太好用。
现在我正在尝试 searchoptions.afterRedraw() 但我不确定这是否对我有帮助。
编辑 2: 假设我有这个
colModel: [
{name:"country", label:"Country", search:true},
{name:"city", label:"City", search:true},
{name:"zip", label:"Zip Code", search:true}
]
当用户打开搜索模式时,他将添加一个新规则和 select 保管箱中的字段...
<select class="selectLabel">
<option value="country">Country</option>
<option value="city">City</option>
<option value="zip">Zip Code</option>
</select>
然后,用户单击一个外部按钮,这会触发一个事件,该事件将修改任何列下拉框(现在或将来),这应该是...
<select class="selectLabel">
<option value="country">Country</option>
<option value="city">City</option>
<option value="zip">Zip Code</option>
<option value="phone1">Phone 1</option> //dynamically added
<option value="phone2">Phone 2</option> //dynamically added
<option value="phone3">Phone 3</option> //dynamically added
//(and so on...)
</select>
这些新的伪字段(phone1、phone2 ...)不存在于 colModel 中,因为它们是由一些外部代码即时创建的。
你没有发布演示,我可以修改它。因此,我只描述您可以做什么。 jqGrid 的搜索对话框包含 columns
参数。搜索对话框包含基于选项的信息(如果存在)。如果该选项不存在,则将使用 colModel
的副本。因此,您可以使用您想要的任何信息动态填充 columns
,搜索对话框将包含它。查看 the old answer or in the demo 的代码示例,它使用 columns
参数。