У меня была аналогичная проблема. Насколько я знаю, браузер не выдает никаких событий, когда пользователь вставляет их с помощью правого клика, а также когда они выбирают из списка ранее использованных значений.
Я в конечном итоге решил его достаточно хорошо, добавив привязку моего обработчика событий к событию размытия. Единственный случай, который не удалось поймать, - это когда они вставляют значение с помощью мыши, а затем нажмите клавишу Enter для отправки. Я смог обойти это через небольшой повозка, запряженная волами:
$(element)
.bind('keydown blur', handlerFunction)
.keydown(function(event) {
if (event.keyCode === 13 /* Enter Key */) {
event.preventDefault();
event.stopPropagation();
}
})
.keyup(function(event) {
if (event.keyCode === 13 /* Enter Key */) {
$(this).closest('form').submit();
}
});
По сути, это работает, потому что JQuery будет выполнять события в том порядке, они были связаны. Обычно подача формы происходит при нажатии клавиши Enter. Чтобы дать время манипулятора для выполнения своей магии, вам нужно отложить это представление формы до тех пор, пока не произойдет событие keyup, поэтому другой обработчик клавиатуры может работать первым.
Теперь вы сказали, что используете плагин, который добавляет задержку, прежде чем реагировать на событие пользователя. Это означает, что вы не сможете использовать эту технику дословно. Одна вещь, которая могла бы работать вместо этого, заключалась бы в том, чтобы вызвать функцию обработчика напрямую, прежде чем разрешать отправку формы. Чтобы сделать это, вы бы изменить последний обработчик KeyUp к:
.keyup(function(event) { // Part 2
if (event.keyCode === 13 /* Enter Key */) {
handlerFunction.call(this, event); // force it to happen now
$(this).closest('form').submit();
}
});
Как Josh K упоминалось ранее, вы можете просто связать что-то к представить события на форме, чтобы сделать что-то подобное. Если вы делаете Ajax там, не забудьте установить async: false
в пройденных параметрах, потому что в противном случае форма будет продолжена и будет отправлена, не дожидаясь завершения вызова.