在textarea中按Enter键提交值,按Shift + Enter键应转到下一行

时间:2011-09-08 08:07:28

标签: javascript jquery keypress

我想要一个聊天框(textarea),如果用户按Enter键,则应提交聊天,如果用户按Shift + Enter,则应输入新行。

我尝试了一些但却无法找出确切的keyup或keydown事情。我目前使用的代码是:

$("textarea").keydown(function(e){
    if (e.keyCode == 13 && !e.shiftKey)
    {
        e.preventDefault();
    }
}); 

jsFiddle

我还希望在按下Enter + Shift键时使\n到位。

修改

我的代码问题是: -

当我使用alert检查客户端上的内容时,它会显示下一行。但是当我发布它时,我的轨道会结束。然后它只是一个简单的字符串。没有新线路。

这就是我向rails服务器发送聊天的方式。

  $.post("/incomingchat", { body:$("#chat_" + group_id).val() },
   function(data){
        // do something..
    });

3 个答案:

答案 0 :(得分:3)

我之前已经回答了这个问题。如果插入符号不在textarea的末尾,那有点棘手:

How do I detect "shift+enter" and generate a new line in Textarea?

答案 1 :(得分:3)

$("textarea").keydown(function(e)
{
    if (e.keyCode == 13)
    {
        if (e.shiftKey) {
            $(this).val( $(this).val() + "\n" );
        }
        else {
            submitTheChat();
        }
    }
});

答案 2 :(得分:1)

请考虑使用keypress事件。如果你在jsfiddle中运行代码,你会看到按Enter键时没有添加新行。

$("textarea").keypress(function(e){
    if (e.keyCode == 13 && !e.shiftKey)
    {        
        e.preventDefault();
        //now call the code to submit your form
        alert("just enter was pressed");
        return;
    }

    if (e.keyCode == 13 && e.shiftKey)
    {       
        //this is the shift+enter right now it does go to a new line
        alert("shift+enter was pressed");        
    }    
});