【问题标题】:How to make "Enter" key in a textarea submit a form如何使文本区域中的“Enter”键提交表单
【发布时间】:2012-02-14 14:04:17
【问题描述】:

出于显而易见的原因,我有一个使用文本区域而不是文本的聊天。这就是为什么每次成员按 ENTER 键时,他们都会换行而不是发送消息。 我想改变这一点,所以每次他们点击 ENTER = 要提交的消息,然后光标返回 textarea 以便他们输入下一条消息。 我尝试了在这个网站上找到的不同代码,大多数都不起作用,那些似乎做了什么的人只是刷新了页面,我得到了一个空白页面。

我的代码:

<form name="message" action="">
    <textarea name="usermsg" autocomplete="off" type="text" id="usermsg" rows="4" cols="30" style="width: 450px; margin-left: 25px;">
    </textarea>
    <br/>

    <p style="margin-left: 420px;"><input name="submitmsg" type="submit"  id="submitmsg" value="Send" /></p>
</form>

非常感谢您的宝贵时间。

【问题讨论】:

  • 你在说什么编程语言? HTML?
  • PHP 是编程语言。
  • 可能是因为如果您在&lt;input type="text"&gt; 中输入的文本太长,文本将不会像在 textarea 中那样换行。
  • 编程语言在这里应该无关紧要,因为这是客户端请求。
  • 嗯..我会去阅读有关文本框的内容,看看这是关于什么的。谢谢。

标签: html forms


【解决方案1】:

试试这个(注意按 Enter 提交,Shift+Enter 添加一个新行)。

$("#textareaId").keypress(function (e) {
    if(e.which === 13 && !e.shiftKey) {
        e.preventDefault();
    
        $(this).closest("form").submit();
    }
});

【讨论】:

  • 很久没写这个例子了。但是 return false 的原因是为了防止事件传播(就像它所做的那样:e.preventDefault())。也许这是不必要的,但我不记得了。所以测试,
  • 按 Enter 似乎发送表单(至少表单已关闭),但 textarea 的内容未保存。
  • @SergioCabral 使用 e.preventDefault ();很有帮助,因为在按 Enter 后,只有 JS 启动而不在 textarea 中添加新行。
【解决方案2】:

原生 JavaScript 解决方案

function submitOnEnter(event){
    if(event.which === 13){
        event.target.form.dispatchEvent(new Event("submit", {cancelable: true}));
        event.preventDefault(); // Prevents the addition of a new line in the text field (not needed in a lot of cases)
    }
}

document.getElementById("usermsg").addEventListener("keypress", submitOnEnter);

如果您不想在单击 Shift 时不提交,您只需将第 2 行更改为:

if(event.which === 13 && !event.shiftKey){

要清除文本区域,只需将其添加到 if 语句正文中

event.target.value = "";

要将其与 Internet Explorer 11 一起使用,请将第 3 行更改为:

var newEvent = document.createEvent("Event");
newEvent.initEvent("submit", false, true);
event.target.form.dispatchEvent(newEvent);

但是等一下?为什么不使用event.target.form.submit();

当您调用表单的提交方法时,不会调用事件监听器。


演示:

function submitOnEnter(event){
    if(event.which === 13){
        event.target.form.dispatchEvent(new Event("submit", {cancelable: true}));
        event.preventDefault(); // Prevents the addition of a new line in the text field (not needed in a lot of cases)
    }
}

document.getElementById("usermsg").addEventListener("keypress", submitOnEnter);

document.getElementById("form").addEventListener("submit", (event) => {
    event.preventDefault();
    console.log("form submitted");
});
<form id="form">
    <textarea id="usermsg"></textarea>
    <button type="Submit">Submit</button>
</form>

【讨论】:

  • 请注意,new Event() 在 IE11 中不起作用
  • @pttsky 添加了关于 IE 11 的注释
  • 为香草点赞。谁想要jQuery?
【解决方案3】:

我创建了一个 jsfiddle,其中包含一个示例,说明如何使用 jQuery 以及 keypressfunction 和 which 属性:http://jsfiddle.net/GcdUE/

不确定您要求的更多内容,因此请尽可能详细说明您的问题。

$(function() {
    $("#usermsg").keypress(function (e) {
        if(e.which == 13) {
            //submit form via ajax, this is not JS but server side scripting so not showing here
            $("#chatbox").append($(this).val() + "<br/>");
            $(this).val("");
            e.preventDefault();
        }
    });
});

【讨论】:

  • 安德斯,这可行,但消息只停留一秒钟,然后从聊天中消失。
  • 好的,根据我的聊天编辑了一些内容,您的代码现在可以完美运行了,谢谢大家,你们一直很友善!
  • 很好,但将 [ if (e.which == 13) { ] 更改为 [ if(e.which == 13 && !e.shiftKey) { ] //// // 这样我们就可以按 SHIFT+ENTER 换行了。
【解决方案4】:

好吧,假设您使用的是 jquery,它将是您输入字段上的一个简单侦听器:

在您的页脚

【解决方案5】:
function KP()
{    
var x = event.keyCode;
   if(x==13)
        {
            // alert (x);
            document.message.submit();
        }
}

php

echo '<textarea  name="usrMsg" id="usrMsg" OnKeyPress="KP();">'txt'</textarea>';

【讨论】:

  • 请考虑你在做什么。
  • 虽然这确实提交了表单,但它还在某些浏览器中的 SELECT 框中放置了一个换行符,如果表单保持不变,您不希望这样做。要解决此问题,请让函数为 Enter 返回“false”,然后输入“return KP();”在来电者中。有关类似示例,请参阅stackoverflow.com/questions/3059559/…
【解决方案6】:

使用&lt;input type=text&gt; 代替&lt;textarea&gt;。那么你有更好的机会。在textarea 中,按 Enter 应该意味着文本中的换行符,而不是提交文本。

【讨论】:

  • 是的,我知道,它曾经是文本,但对于发布较长帖子的聊天(例如在此评论框中)来说,只有一行是一个问题。感谢您花时间回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-11
  • 1970-01-01
  • 2010-12-06
  • 2010-10-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多