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

我想要一个聊天框(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.. }); 

我以前回答过这个问题。 如果插入符号不在textarea的末尾,这有点棘手:

如何检测“shift + enter”并在Textarea中生成一个新行?

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

请考虑使用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"); } });