4 回答
TA贡献1847条经验 获得超7个赞
您需要收听该input事件,因为正如您所说change,仅在输入失去焦点后触发,这不是您想要的。您还需要只处理一次事件。
document.getElementById("test-area").addEventListener("input", () => {
startTimer(1);
}, {once: true});
请注意,这会在触发事件处理程序后删除它。如果您需要再次运行它,您将不得不再次注册该事件。也许在您的计时器回调中。
TA贡献1785条经验 获得超8个赞
一些解决方案:
变体 1
只需创建一个标志:
var timerStarted = false; // Was the timer started?
document.getElementById("test-area").oninput = function () {
if(timerStarted) return; // If timer was started - do nothing
startTimer(1); // Else - start the timer
timerStarted = true; // Remember what we've started the timer
};
变体 2
(有点短)
document.getElementById("test-area").addEventListener("input", function () {
startTimer(1);
}, {once: true}); // Good thing about addEventListener
// With this it will run the event only single time
更多信息:https ://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener
TA贡献1779条经验 获得超6个赞
你试过 onfocus 吗?它不完全是他们开始打字的时间,但它确实有效。另一种选择是您使用 onInput 并在时钟启动功能上将布尔值 -isRunning - 更改为 true。然后放一个 if (isRunning) 返回。就像是:
function start() {
if(isRunning) return;
isRunning = true;
}
然后在停止 onChange 时将布尔值更改为 false
TA贡献1797条经验 获得超4个赞
可以用 JQuery 吗?如果是这样,它有一个方法 .one() 将只执行一次函数。然后您可以自由使用 keydown/keyup 事件处理程序。例如。
<script>
$(document).ready(function(){
$("#test-area").one("keydown", function() {
alert("hey");
});
});
</script>
添加回答
举报