输入按键后清除textarea输入

dan*_*yb2 6 html javascript textarea keycode

我正在使用JavaScript创建一些聊天应用程序,允许用户在按下回车键后发送消息

window.onkeydown=function(event){
    if(event.keyCode==13){
        sendNew();
    }
}
Run Code Online (Sandbox Code Playgroud)

并在sendNew()函数中;

var msg=document.getElementById('txt').value.toString().trim();
    if(msg!=="") {
    //send message        
    document.getElementById('txt').value = "";
    }
Run Code Online (Sandbox Code Playgroud)

当textarea处于onfocus时按Enter键时,文本被清除但似乎插入一个新的行字符,光标将转到textarea中的下一行.

我怎样才能摆脱这个并拥有一个完全空的textarea?

Bra*_*low 13

您需要做的是在按Enter键时取消浏览器的默认行为(您必须阻止浏览器添加新行).

解决方案:使用event.preventDefault().文档:https: //developer.mozilla.org/en/docs/Web/API/Event/preventDefault

试试这段代码:

window.onkeydown=function(event){
    if(event.keyCode==13){
        sendNew();
        if(event.preventDefault) event.preventDefault(); // This should fix it
        return false; // Just a workaround for old browsers
    }
}
Run Code Online (Sandbox Code Playgroud)

有些开发人员会忘记event.preventDefault并写作return false.这是一个不好的做法,我建议你使用新方法.

  • 在Chrome 53中,“ return false”实际上并不能为我解决,但“ event.preventDefault()”确实可以解决。 (2认同)

tec*_*bar 4

那是因为回车键的默认行为是插入新行。为了防止这种情况发生,return false请使用 keydown 事件处理程序。

window.onkeydown=function(event){
    if(event.keyCode==13){
        sendNew();
        return false; // prevent default behavior if ENTER key
    }
}
Run Code Online (Sandbox Code Playgroud)