【问题标题】:how can I get the "ID" of selected value in Jquery Ui Autocomplete如何在 Jquery Ui 自动完成中获取所选值的“ID”
【发布时间】:2011-11-30 05:19:53
【问题描述】:

我正在使用 JqueryUI 自动完成。在源方法之后我写了选择方法。在那个 ui.item.value 中显示我选择的值的结果,但是 ui.item.id 没有工作它显示 'undefined' 。我如何获得选择值 ID?请在这里找到我的代码http://jsfiddle.net/hari034/R8xGA/

示例代码 URL 返回:

3045:妈妈:孟买^

说明:

3045 : 地点 ID

妈妈:地方代码

孟买:地名。

^ : 全部来自 DB,用“^”隔开

【问题讨论】:

  • 这个问题太抽象了。你能粘贴你的代码吗?
  • 我的代码链接jsfiddle.net/hari034/R8xGA
  • 请提供来自 applicationURL (ajax) 的示例返回值
  • 示例代码 URL 返回:3045:MUM:MUMBAI^ 描述:3045:placeID MUM:地点代码 MUMBAI:地点名称。 ^ : 所有来自 DB 的放置由 "^" 分隔
  • 试试这个,var item_id = ui.item.id;然后对两个警报都使用 item_id,看看这是否有效,也许其他东西正在以某种方式改变代码?

标签: javascript jquery-ui jquery-ui-autocomplete


【解决方案1】:

ui.item.id 是 undefined,因为您没有将它添加到自动完成源中的每个 item。您可以通过在 AJAX 调用中调整 succeess 函数来完成此操作:

success: function(data) {

    fromPlacesNamesList = new Array();
    var f = data.split("^");
    for (indx = 0; indx < f.length - 1; indx++) {
        var f1 = f[indx].split(':');
        fromPlacesNamesList[indx] = { label: f1[2], id: f1[0] };
    }
    response(fromPlacesNamesList);
    return false;
} //success

此外,您应该从 for 循环外部调用 response。

更新示例: http://jsfiddle.net/7GBTH/

【讨论】:

  • 谢谢 Andrew,在 for 循环之外写响应有什么不同吗?在我把它放进去之前工作正常,但自动建议它需要 2-5 秒的时间。
  • 谢谢 Andrew,在 for 循环之外写响应有什么不同吗?在我把它放在里面之前工作正常,但自动建议它需要 2-5 秒的时间来填充。我还有另一个问题,如果使用“NEL”搜索地名,自动提示显示“NEGLORE”,“NELORE”......为什么它显示开始NEG......?我签入了我的 java 类响应,开始 NEL ..但自动完成显示 NEG...NEL .....
  • @hari:您正在构建要发送到小部件的建议列表。这意味着您必须让您的 for 循环运行并填充该列表。在循环内调用response 将通知小部件关于每次迭代的建议,我认为这不是你想要的。至于建议的问题,可能与您的服务器端(Java)代码有关。
  • 在 for 循环中调用响应后感谢 Andrew,结果立即填充。在发生什么之前,我希望每次迭代响应都会生成,这可能是导致鼠标闪烁(循环迭代内部)并显示最终结果的原因。但在 IE-6 组合框中的值与自动建议值重叠。
  • @hari:我不确定你的意思。您是否可以在示例中重现这一点?
【解决方案2】:

我已经为您的问题准备了某种解决方案。没有直接的方法可以从自动完成中获取信息(或者至少我不知道)。请在此处找到工作示例:http://jsfiddle.net/R8xGA/3/

基本上,您需要将结果 id 保存在全局数组中,以便稍后在 select 中访问。

希望对你有帮助!

编辑:您基本上需要添加 3 个元素

  1. 在for(indx=0;indx&lt;f.length-1;indx++){之前添加阵列重置ids = new Array;
  2. 在 for 语句中声明数组,其 ids 以值作为键 ids[f1[2]] = f1[0];
  3. 在选择阶段从阵列中获取信息ids[ui.item.value]

PS。如果您有重复的值,此技巧将不起作用。增加对此类用例的支持会很困难。

最好, 马立克

【讨论】:

  • 感谢 Marek,它对您的逻辑工作正常。但是显示结果需要几秒钟。在这里我有一个疑问,我可以将来源作为“result.jsp”。我的要求是用户可以在文本框中输入 placeName 或 Placecode,在这两种情况下我都必须填写地名。其他请建议我,很好的例子。
  • 我不确定我是否理解您想要实现的目标。是的,您可以在其中使用 result.jsp 并即时生成内容。我使用了静态返回,因为我没有准备好它。如果您可以托管可通过互联网访问的 api,我可以在此示例中使用它(经过一些调整,因为跨域会有问题)。
  • 另一件事是,如果您想更改输入中的值(例如通过向其中添加 ID),那没问题……但正如我之前告诉过的那样,我不确定是什么你的目标。如果你能再描述一下。
  • 我有一个 Web 应用程序包含 home.html 作为主页。此页面有“From Place”作为带有自动完成功能的文本框。在此字段中,用户可以输入地点名称或地点代码,在这两种情况下,我都必须填充地点名称。但是 placeNames(data) 将来自不同的应用程序。这些地点名称与 PlaceID、PlaceName、PlaceCode、PlaceName 混合在一起。 .我现在的代码工作正常。但在文本框中输入 minLength 3 字符后,鼠标闪烁最多 2-5 秒,然后显示建议。
猜你喜欢
  • 1970-01-01
  • 2020-10-26
  • 2013-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-28
  • 2012-02-12
相关资源
最近更新 更多