【问题标题】:Inhibit input's onchange when jQuery UI Autocomplete is clicked单击 jQuery UI 自动完成时禁止输入的 onchange
【发布时间】:2012-03-02 19:30:50
【问题描述】:

我有一个使用 jQuery UI 自动完成的文本输入元素。输入绑定了一个onchange 事件,以根据用户的选择更改一些其他表单值。当用户从自动完成中选择一个选项时,我还想更改其他表单值。

问题在于,如果用户正在查找“beer”,但只键入“bee”,然后单击自动完成中的啤酒选项,则输入的 onchange 会触发值为“bee”,然后自动完成的选择功能触发(“啤酒”的正确值)。由于这两个处理程序都使用 ajax 调用来查找某些内容,因此我陷入了竞争状态。

我的问题是:在用户单击自动完成选项的情况下,有什么方法可以让onchange 不触发或中止。注意:这仅在单击时发生,仅使用键盘选择选项不会触发输入的onchange

当自动完成处于活动状态时,我不能完全禁用onchange,因为可以相信用户只会继续输入,然后退出输入而不从自动完成中选择任何内容。

我已经完成了相当多的console.log()'ing,onchange 事件在我能想到的所有其他事件之前触发,包括输入的focusout、自动完成的项目的焦点等。

【问题讨论】:

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


    【解决方案1】:

    这个问题正是自动完成的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 */
            }
        }
    });
    

    示例: http://jsfiddle.net/bdDs7/

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-25
    • 1970-01-01
    • 1970-01-01
    • 2011-03-22
    • 1970-01-01
    • 1970-01-01
    • 2012-12-14
    • 1970-01-01
    相关资源
    最近更新 更多