setTimeout 和 e.preventDefault

setTimeout and e.preventDefault

我有两个事件监听一个独特的字段:autocomplete 和 onPaste。 我的目标是在粘贴时调用另一个逻辑,并在键入时使用自动完成功能。

我是按以下方式做的:

$("#refno").on('paste', function (e) { 
    setTimeout(function () {
        //some logic here
    }, 0);
    e.preventDefault();
})

function quickSearch(fieldName) {
    //some other logic here
} 

quickSearch('.open-invoices-quick-search');

问题是 e.preventDefault();被调用或太早(阻止来自 setTimeout 的代码),或太晚,允许执行 quickSearch 函数。

知道如何处理这种情况吗?

这是 JSFddle:https://jsfiddle.net/mk242zkz/1/

无法测试,因为我找不到自动完成库。

您可以改用此逻辑,但风格模糊恕我直言,您的预期行为是什么...

$("#refno").on('paste', function () {
    $(this).autocomplete("disable").one('keydown', function () {
        $(this).autocomplete("enable");
    });    
});

-jsFiddle-

JqueryUI 自动完成提供了一些常备方法,您可以在初始化期间和之后调用自动完成元素。

我相信您已经看过了,但请查看此处的 API 文档以了解自动完成: Autocomplete Docs

在您的粘贴事件中尝试对您的自动完成对象使用禁用方法。 之后不要忘记重新启用它。