【问题标题】:How might I implement immediate text submission when the enter key is pressed in a textarea?当在文本区域中按下回车键时,我如何实现立即文本提交?
【发布时间】:2010-10-21 20:39:16
【问题描述】:

重复:

Submitting data from textarea by hitting “Enter”.


我有一个文本区域和一个提交按钮:

<textarea id="chat"></textarea>
<input type="submit" value="Submit" onclick="send_msg();">

回车时提交texarea的值:

    textarea.onkeyup = function(e) {
        alert(e.keyCode);
        e = e || window.event;
        if (e.keyCode === 13) {
            send_msg();
        }
        return true;
    }

问题是让 textarea 在让光标跳转到下一行之前提交它的值。这怎么可能?

【问题讨论】:

  • 除非你在模仿一个 IM 客户端,否则这是一件坏事。 Textarea 的设计是多行的。如果您不想要多行,请使用 input="text"
  • 即使你是在模仿一个IM客户端,我还是会说最好有一个input type="text"来输入消息,并使用AJAX或其他东西来刷新聊天框......
  • 您之前问了一个几乎相同的问题:stackoverflow.com/questions/789701/… 为什么不扩展这个问题并让其他人了解您的进展?
  • 叹息,我会过度回答重复的,不是吗:-/
  • @olliej:这也是一个有用的答案。您应该将其作为原始问题的答案发布,或者将其编辑为 Rob 对该问题的答案(两个答案很好地结合在一起)。

标签: javascript input textarea


【解决方案1】:

诀窍是阻止浏览器在按键按下和按下时执行默认行为。为此,当您检测到键码 13 时,只需在 onkeypress/onkeyrelease 处理程序中 return false

【讨论】:

    【解决方案2】:

    这里忽略的一个问题是用户运行输入法(编辑器)——例如。非拉丁文本输入。我熟悉的 IME 是 OSX 上的 Kotoeri Hiragana IM,但还有很多其他的日语输入法(Kotoeri 单独有多种不同的输入模式,至少还有一种称为 ATOK 的主要输入模式),除了韩文模式,繁体中文和简体中文,以及许多其他鲜为人知的语言。这些输入法存在于所有主要平台(尤其是 Win、Mac 和 Linux)上。

    从类似于您尝试的代码的角度来看,他们引入的问题是,确切的物理按键不一定与用户输入的实际输入相对应。

    例如,默认情况下在平假名下键入字符序列toukyou&lt;enter&gt; 将产生字符串とうきょう,请注意结果文本中没有&lt;enter&gt;,因为输入确认组合文本。但除此之外,实际出现的字符序列会随着输入的输入而变化:

    t // t
    と // to
    とう // tou
    とうk // touk
    とうky // touky
    とうきょ // toukyo
    とうきょう // toukyou
    

    如果当我在 webkit 中实现此功能时记忆有用,则有必要将 keyDown 上的 keyCode 设为 229,以便在 IME 中键入所有键(与 IE 兼容)——但我不记得 keyUp 的行为是什么。

    还值得注意的是,在某些 IME 中,您不一定会收到 keydowns、keypress 或 keyup。否则您将收到多个。或者它们在输入结束时一起发送。

    总的来说,这是目前 DOM 事件实现中非常...不干净...的一部分。

    【讨论】:

      【解决方案3】:

      e.preventDefault(); 这个文本在这里是因为堆栈溢出坚持认为少于 30 个字符没有有用的答案。猜猜我对此有何感想?

      【讨论】:

        猜你喜欢
        • 2011-04-10
        • 2013-10-06
        • 1970-01-01
        • 2021-05-14
        • 2021-05-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-26
        相关资源
        最近更新 更多