如何强制jQuery .change函数从自动完成对象中捕获用户选择

时间:2014-06-24 23:43:27

标签: javascript jquery

我有以下带有自动完成功能的文本字段: -

目前我写了一篇文章来捕捉文本框中的内容: -

$("#TextBox").change(function () {

$.getJSON("@Url.Content("~/Switch/LoadRelatedIPs")", { searchterm: $("#TextBox").val(), SearchBy: $("#ChoiceTag").prop("checked") ? $("#ChoiceTag").val() : $("#ChoiceName").val(), },

           function (CustomerData) {

我面临的问题是getJSON中的$("#TextBox").val()只会捕获文本框中已有的值,而不会捕获用户从自动完成结果中选择的值。例如,在上图中,$("#TextBox").val()将是v10020,而不是应该是v100205的全文?任何人都可以建议如何解决这个问题?我不想在自动完成中使用select,因为这样我将从.change中重复一次调用,而另一次调用自动完成选择函数?

2 个答案:

答案 0 :(得分:0)

目前尚不清楚哪些代码正在处理自动完成功能。在设置新值后,您可能需要修改插件或脚本以触发更改事件。

$("#TextBox").val("New Value").trigger("change");

您还可以只监听输入中文本发生变化时触发的各种事件:

$('#TextBox').on('input propertychange paste', function() {

});

答案 1 :(得分:0)

当文本框失去焦点时会发生更改事件,这将在用户单击自动完成建议时发生,这是在自动完成javascript填写完整值之前。这是更改事件的正确行为。

似乎您想要的不是在设备资源标记字段更改时执行代码,而是在输入正确(完整)值时执行代码。可能的解决方案:除了处理自动完成的select事件之外,当它执行搜索时,检查是否只返回一个结果并且它与用户输入的结果相匹配,然后自动选择。因此,在上面的示例中,如果用户输入完整的字符串" V100205",则自动完成将返回一个结果" V100205"。然后取消显示自动完成,然后执行代码。