setTimeout и e.preventDefault

У меня есть два события, прослушивающие уникальное поле: автозаполнение и 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 ответа

Решение

Вы могли бы использовать эту логику вместо этого, но стиль смутный imho, каково ваше ожидаемое поведение...

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

-jsFiddle-

JQueryUI autocomplete предоставляет некоторые стандартные методы, которые вы можете вызывать для элемента autocomplete во время и после инициализации.

Я уверен, что вы уже видели это, но ознакомьтесь с документами API здесь для автозаполнения: Автозаполнение документов

Внутри вашего события вставки попробуйте использовать метод disable для объекта автозаполнения. Не забудьте включить его снова.

Другие вопросы по тегам