通过点击"Enter"从textarea提交数据

Ale*_*lex 17 html javascript forms

我有JS的动态网页.有一个<textarea>和一个发送按钮,但没有<form>标签.如何在按下Enter时按下" 提交"按钮并<textarea>清除"清除" ?<textarea>

Koo*_*Inc 26

你可以使用textarea的keyup处理程序(虽然我会反对它*).

[SomeTextarea].onkeyup = function(e){
  e = e || event;
  if (e.keyCode === 13) {
    // start your submit function
  }
  return true;
 }
Run Code Online (Sandbox Code Playgroud)

*为什么不为此使用文本输入字段?Textarea特别适用于多行输入,即单行输入的文本输入字段.使用输入处理程序可以压缩多行输入.我记得曾经使用它一次用于XHR(又名AJAX)聊天应用程序(因此textarea的行为类似于MSN输入区域),但是使用CTRL-enter键重新启用了多行输入.这可能是你的想法吗?听众会像这样扩展:

[SomeTextarea].onkeyup = function(e){
  e = e || event;
  if (e.keyCode === 13 && !e.ctrlKey) {
    // start your submit function
  }
  return true;
 }
Run Code Online (Sandbox Code Playgroud)

  • @Alex:firefox,opera和safari(以及嵌入webkit的其他浏览器)将事件作为参数传递给事件处理程序,但IE却没有.在IE中,事件是全局对象上的属性.令人高兴的是||的语义 在JS中,让它变得非常干净.在JS中,表达式为"a ||"的结果 b`将是'a`的值,或者如果`a`被认为是假的,结果将是'b`.所以在这种情况下`e = e || 如果事件作为参数传递,event`将为自己分配`e`,或者将`e`设置为`event`,从而让这个代码在所有浏览器中都有效. (7认同)

Rob*_*Rob 15

按Enter键textarea插入换行符,而不是提交父表单; 即使使用常规表单标签,这也不会以这种方式工作.

尝试解决此问题是不可取的,因为它会违反用户对文本区域控件行为的期望,无论是在其他网站中还是在其平台上的其他应用程序中.

  • 我很久以前就赞成过这个答案,但有些情况下用户并不是真的意识到他正在输入textarea.以Facebook聊天的输入行为例.它以单行开始,并在用户输入更多内容时垂直扩展.用户期望在输入时提交是绝对合理的. (5认同)
  • ++用于"不可取"的段落.始终知道输入密钥在网站textarea中将做什么是使用其他GUI时我想念的许多小的一致性之一. (4认同)

oll*_*iej 13

@ Shog9建议我将我的答案复制到这个问题的重复版本:忽略的一个问题是运行输入法(编辑)的用户 - 例如.非拉丁文本输入.我熟悉的IME是OSX上的Kotoeri Hiragana IM,但是还有很多其他的日语(Kotoeri单独有多种不同的输入模式,至少还有一种主要的称为ATOK),除了hangul的模式,传统和简体中文,以及许多其他不太知名的语言.这些输入法存在于所有主要平台上(尤其是Win,Mac和Linux).

从类似于您正在尝试的代码的角度出现的问题是,确切的物理按键不一定与用户输入的实际输入相对应.

例如toukyou<enter>,默认情况下在平假名下键入字符序列将生成字符串?????,请注意<enter>结果文本中没有,因为enter确认组合文本.但除此之外,输入的实际字符序列会随着输入的输入而变化:

t // t
? // to
?? // tou
??k // touk
??ky // touky
???? // toukyo
????? // toukyou
Run Code Online (Sandbox Code Playgroud)

如果我在webkit中实现了这个内存,那么有必要在keyDown上为keyCown设置keyCode为229,用于输入IME中的所有键(用于与IE进行比较) - 但我不记得keyUp的行为是什么.

值得注意的是,在某些IME中,您不一定会收到keydowns,keypress或keyup.或者您会收到多个.或者他们都是在输入结束时一起发送的.

一般来说,这是目前DOM事件实现的一个非常不洁净的部分.

  • 它表明,许多人认为他们所说的语言每次击键都有一个字符是理所当然的.这就是我做的. (2认同)