setTimeout和e.preventDefault

时间:2015-10-19 12:51:08

标签: jquery ajax preventdefault quick-search onpaste

我有两个事件正在侦听一个独特的字段: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/

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

2 个答案:

答案 0 :(得分:1)

你可以使用这种逻辑,但风格模糊imho你期望的行为是什么......

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

-jsFiddle-

答案 1 :(得分:0)

JqueryUI自动完成提供了一些在初始化期间和之后可以在自动完成元素上调用的库存方法。

我确定您已经看过它,但请查看此处的API文档以了解自动填充功能: Autocomplete Docs

在粘贴事件内部尝试在自动完成对象上使用disable方法。 不要忘记在之后重新启用它。