adi*_*tya 5 html javascript events textarea keydown
如何将一堆代码附加到onkeydown
事件中,但是继续将文本textarea
快速而清晰地输入?任何超过几个IF语句的东西似乎都会大大降低它的速度.
编辑:我应该添加(不能相信我忘了!)这不会影响桌面浏览器.这主要是iPhone Safari的一个问题.其他移动浏览器也可能受到影响,但我们专注于iPhone Safari,因为它最好地执行JS(AFAIK)
考虑到您对此的编辑重点是 iPhone 访问......
iPhone确实没有那么强大的功能。onchange
使用oronblur
代替会更好onkeydown
。
Dave 答案的另一种选择是等待用户暂停(例如 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);
};
Run Code Online (Sandbox Code Playgroud)
这应该在第一次按键时设置计时器,为每个连续的按键停止并重新创建计时器。最后在用户停止打字 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);
Run Code Online (Sandbox Code Playgroud)