Teniendo en cuenta tu edición con respecto a este se centra en el acceso iPhone ...
El iPhone realmente no tiene tanto poder a la misma. Pues toma el mejor simplemente usando onchange
o onblur
en lugar de onkeydown
.
Una alternativa a la respuesta de Dave está a la espera para el usuario para hacer una pausa (por ejemplo, durante 5 segundos):
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);
};
Esto debería ajustar el temporizador con el primer keydown, detener y volver a crear el temporizador para cada keydown sucesivo. Finalmente llama 5 segundos después de que el usuario deja de escribir.
Además, tenga en cuenta la falta de paréntesis después checkTextArea
. Esto dará setTimeout
la referencia de la función contra su return
.
También puede configurar esto en una función para que sea más fácil de usar para múltiples elementos:
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);
Lamentablemente no puedo, ya que es parte de la política de la empresa. Eso complica las cosas, sí, pero esperaba que alguien pudiera haber encontrado una solución general. – aditya
Dado que la calidad de la aplicación del teléfono celular es tan críticamente dependiente de la administración micrograbada de pulsaciones de teclas, trataría de evitar temporizadores, etc. - el ojo del usuario a menudo está firmemente adherido a la interacción entre la pantalla y el teclado. ¿Puedes generalizar algo y publicarlo? – dkretz