Учитывая ваше редактирование относительно того, что это сфокусировано на доступе к iPhone ...
У iPhone просто нет такой силы. Вам будет лучше использовать onchange
или onblur
вместо onkeydown
.
Альтернативой ответу Дейва является ожидание приостановки пользователя (например, в течение 5 секунд):
var textarea = document.getElementById('textarea');
function checkTextArea() {
if (textarea.value /* ... */) {
/* ... */
}
}
textarea.keyDownTimeout = null;
textarea.onkeydown = function () {
if (textarea.keyDownTimeout) clearTimeout(textarea.keyDownTimeout);
textarea.keyDownTimeout = setTimeout(checkTextArea, 5000);
};
Это должно установить таймер с первым нажатием клавиши, останавливая и воссоздавая таймер для каждого последующего нажатия. Наконец, через 5 секунд после того, как пользователь перестал печатать.
Также обратите внимание на отсутствие скобок после checkTextArea
. Это даст setTimeout
ссылку на функцию по сравнению с return
.
Вы также можете настроить это в функции, чтобы упростить использование для нескольких элементов:
function setPauseTimer(element, timeout, callback) {
var timer = null;
element.onkeydown = function () {
if (timer) clearTimeout(timer);
timer = setTimeout(function(){ callback(element); }, timeout);
};
}
function checkTextArea(textarea) { /* moved from global to argument */
if (textarea.value /* ... */) {
/* ... */
}
}
setPauseTimer(document.getElementById('textarea'), 5000, checkTextArea);