Как получить значение поля во время события вставки? - PullRequest
9 голосов
/ 13 января 2010

У меня есть текстовое поле, к которому я привязываю событие paste к использованию JQuery. Когда я впервые вставляю что-то в поле формы и регистрирую его val(), возвращается пустая строка. Аналогично, если я снова вставлю в поле, он вернет предыдущее значение перед вставкой . По сути, у меня есть состояние гонки или проблема последовательности, из-за отсутствия лучшего термина. Кажется, поле формы не будет обновлено, пока не завершится событие вставки.

Есть ли способ проверить значение поля после , когда событие вставки завершено и поле действительно заполнено? Мне нужно фактическое значение поля, а не clipboardData, поскольку я знаю, что это функция только для IE.

$('#url').bind('paste', function(e) {
    alert($(this).val());
});

1 Ответ

17 голосов
/ 13 января 2010

Получается, что достойное решение - обернуть обратный вызов в setTimeout() с задержкой 0 миллисекунд, чтобы сделать его асинхронным.

Мой новый код:

var urlField = $('#url');
urlField.bind('paste', function(e) {
    setTimeout(function() {
        alert(urlField.val());
    }, 0); // note the 0 milliseconds
});

Благодаря Маскируемому входному плагину DigitalBush он использует эту технику во всем источнике.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...