【问题标题】:Sort jQGrid's select options by label not by value按标签而不是按值对 jQGrid 的选择选项进行排序
【发布时间】:2025-12-05 03:25:02
【问题描述】:

我遇到的是 jQGrid 按其值对选择选项进行排序,但我找不到让它按其标签排序的方法。

选项在本地加载:

var cities = {
    "15604":"Akashi",
    "7538":"lompolo",
    "13488":"Akersloot",
    "15516":"Akita",
    "17301":"Akizuki",
    "15848":"Akola",
    "11415":"Akron",
    "15224":"Akron",
    "7458":"Akrotiri",
    "10783":"Aksaray",
    "15127":"Aksu",
    "9563":"Aktobe"
};

但选项显示如下:

<option role="option" value="7458">Akrotiri</option>
<option role="option" value="7538">lompolo</option>
<option role="option" value="9563">Aktobe</option>
<option role="option" value="10783">Aksaray</option>
<option role="option" value="11415">Akron</option>
<option role="option" value="13488">Akersloot</option>
<option role="option" value="15127">Aksu</option>
<option role="option" value="15224">Akron</option>
<option role="option" value="15516">Akita</option>
<option role="option" value="15604">Akashi</option>
<option role="option" value="15848">Akola</option>
<option role="option" value="17301">Akizuki</option>

这是我使用它的部分:

//other colModels,
{
    "name":"city_id",
    "index":"city",
    "width":"100",
    "editable":true,
    "align":"center",
    "edittype":"select",
    "formatter":"select",
    "editoptions":{"value":cities},
    "stype":"select",
    "searchoptions":{
        "sopt":["eq","ne"],
        "value":cities}
}
//other colModels

在添加或编辑记录时,如何使选择选项按其标签而不是按其值排序?

【问题讨论】:

  • 抱歉,显示您如何在 jqGrid 中使用 select 的代码在哪里?
  • 那里,我很抱歉当我问的时候没有包括它:)

标签: jquery jqgrid


【解决方案1】:

这是不正确的。 jqGrid 根本不对选择选项进行排序。如果您使用 value 属性的对象,则选择选项的顺序仍然存在问题。 The answer 描述为什么表单可以跟随更改选项的顺序。有趣的是,顺序取决于您使用的浏览器。要解决此问题,您可以使用value 属性的字符串形式,也可以使用dataUrl

更新:就像我怀疑你使用了value 的对象格式,所以你遇到了the answer 中描述的问题。您应该将 cities 从对象更改为字符串,例如 "15604:First labele;9563:Second label;...;12345:Last label"

我建议您另外考虑使用 jQuery UI 自动完成功能而不是 &lt;select&gt;

【讨论】:

  • 好吧,我实际上尝试过使用 dataUrl,问题是选项实际上是 17,000 多条记录(我只使用了 10 条记录只是为了展示一个例子),所以在添加/编辑表单之前需要将近 5 秒显示下拉列表,所以我决定在本地加载它,这样服务器只需要加载每个页面,而不是每次触发添加/编辑/搜索请求时。
  • @macinville:加载dataUrl的结果可以缓存。您还可以使用 jQuery UI Autocomplete 代替 &lt;select&gt; 来显着减少需要加载的项目数。如果您不想或不能更改当前行为,您可以通过使用editoptions.value 的字符串形式来解决排序问题。请参阅我的回答的更新部分和我之前在回答中引用的the old answered
  • 谢谢奥列格!我将城市选项生成为字符串而不是 JSON,并且选项的排序是固定的。
  • @Oleg 嗨,Oleg,你能帮我解决这个问题吗?我面临同样的问题。
最近更新 更多