JavaScript:如果刚刚删除所选文本,则不会触发键事件

JavaScript:如果刚刚删除所选文本,则不会触发键事件,javascript,Javascript,我正在将处理程序应用于文本区域上发生的事件,如keypress、keypup和keypdown。它适用于所有情况,除非我选择所有文本并按backspace。不会调用指定的特定函数。如果我在文本区域再次按backspace,将调用该函数。代码如下: function myFunc(f) { console.log("Fired"); // Is logged when select all and remove var h = f.target || f.srcElement ||

我正在将处理程序应用于文本区域上发生的事件,如keypress、keypup和keypdown。它适用于所有情况,除非我选择所有文本并按backspace。不会调用指定的特定函数。如果我在文本区域再次按backspace,将调用该函数。代码如下:

function myFunc(f) {
    console.log("Fired"); // Is logged when select all and remove
    var h = f.target || f.srcElement || this;
    myFunc2(f); // Doesn't get called when select all and remove
}
function myFunc2(e) {
    var $elem = $(e);
    // do important stuff
};

$textarea.addEventListener("keyup", myFunc);
$textarea.addEventListener("keydown", myFunc);
$textarea.addEventListener("keypress", myFunc);
myFunc({ target: $textarea }); // <-- Call explicitly to manage some stuff
完整代码


我找到了解决办法。问题是在页脚高度更改之前调用了我的函数。您需要使用Web API即setTimeout,或者在父函数末尾调用您的函数。我建议在延迟为0毫秒的情况下执行setTimeout,这样,在执行其余代码时就会调用这个重要的函数

setTimeout(myFunc2, 0);
结论:
JavaScript事件没有任何问题。您只需确保调用函数的顺序正确。

只需绑定到输入事件,而不是所有其他事件;它涵盖了你所做的一切,包括鼠标粘贴、拖放文本、kb热键等等@dandavis不,但它不适用于特殊键。如果我在空白文本区按backspace键,它将根本不起作用。顺便说一句,我不知道那件事。谢谢。你是说输入对你的情况不起作用吗?@dandavis我现在使用输入和按键组合。我哥哥刚刚找到了解决办法。在页脚高度更改之前调用该函数。我们可以使用setTimeout,也可以将代码一直放下去,这样,当页脚高度发生变化时就会调用该函数。如果您不知道页脚高度和内容来自何处,请查看我的完整代码。当弹性文本区域的高度发生变化时,我想改变基于身高的页脚高度。@dandavi是我的错。投入是一件大事。它真的适用于一切。谢谢忽略我最后的评论:D
setTimeout(myFunc2, 0);