2011-09-08 112 views
7

我想要一个聊天框(textarea),如果用户按Enter键,那么它应该提交聊天,如果用户按Shift + Enter,则它应该输入一个新的行。按Enter键在textarea上提交值并按下Shift + Enter应该转到下一行

我尝试了一些东西,但无法弄清确切的keyup或keydown事情。我使用的是目前的代码是:

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

jsFiddle

而且我想回车+ Shift键被按下时,为了获得\n到位。

编辑

我的代码的问题是: -

当我检查使用使用客户端的内容警报就说明下一行。但是当我发布它时,我的导轨就结束了。那么它只是一个简单的字符串。没有新的东西在那里。

这就是我如何发送聊天室的轨道服务器。

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

请不要**只是**链接到jsfiddle;始终在问题中包含代码。 – Matt

+1

您发布的代码有什么问题?对我来说,它就像你描述的那样工作? http://jsfiddle.net/Su5ts/25/ – ChrisR

+1

@Matt对不起,请记住这个事情。 –

回答

2

我已经回答过此问题。这是一个有点棘手,如果插入符号是不是在textarea的结尾:

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

+0

问题是,当我发布这个数据使用JQuery到我的后端服务器。我如何识别enter + shift键?在后端与没有输入+ shift键相同 –

+0

@Mohit:我不明白。按shift + enter后textarea的值将包含一个换行符,并且在发布时,此换行符肯定会提交给服务器。 –

+0

@TimDown:我有一个相关的问题。在Chrome中,如果我通过添加新行字符'\ n'来处理按键事件,并且如果textarea是可滚动的,则滚动条将不起作用,我的意思是如果按下回车键,textarea不会滚动当我键入。你对这个问题有什么想法吗? –

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

问题是,当我发布这个数据使用Jquery到我的后端服务器。我如何识别enter + shift键?在后端其相同的没有输入+ shift键 –

1

考虑使用按键事件代替。如果您在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");   
    }  
}); 
+0

问题是当我发布这个数据使用Jquery到我的后端服务器。我如何识别enter + shift键?在后端与没有输入+ shift键相同 –

+0

好吧,我明白了。在这种情况下,我建议看看Tim Down上面发布的回复。 – pedrodg

相关问题