当点击jQuery UI自动完成时,禁止输入的onchange事件

4
我有一个文本输入框,使用jQuery UI自动完成功能。该输入框绑定了一个 onchange事件,根据用户的选择更改其他表单值。当用户从自动完成列表中选择选项时,我也想更改这些其他表单值。
问题在于,如果用户查找“beer”,但只键入“bee”,然后单击自动完成中的beer选项,则输入的 onchange 将带有值“bee”,然后自动完成的select函数将触发(具有正确的值为“beer”)。由于这两个处理程序都利用ajax调用来查找一些内容,因此我遇到竞争条件。
我的问题是:是否有某种方法可以使 onchange 在用户单击自动完成选项时不触发或中止。注意:仅当点击时才会发生这种情况,仅使用键盘选择选项不会触发输入的 onchange 。
对我来说,完全禁用自动完成活动时的 onchange 并不是一种选择,因为很可能用户只是继续输入,而没有从自动完成列表中选择任何内容。
我已经做了相当多的 console.log() onchange 事件触发比我能想到的所有其他事件,包括输入的 focusout、自动完成项的焦点等。
1个回答

4

这个问题正是自动完成的 change 事件的原因。看起来你应该能够利用这个事件根据用户是否选择了一个条目来执行逻辑(从而删除你的 onchangeautocompleteselect 事件处理程序)。例如:

$("#auto").autocomplete({
    source: ['hi', 'bye', 'foo', 'bar'],
    change: function (event, ui) {
        if (ui.item) {
            /* user selected an item */           
        } else {
            /* user entered a new item */
        }
    }
});

Example: http://jsfiddle.net/bdDs7/


安德鲁 - 非常感谢。这种使用更改方法的方式正是我所需要的。 - Mike Hedman
@AndrewWhitaker,对于这个问题你有什么想法吗?http://stackoverflow.com/q/20513604/829533 - zzlalani

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接