我有一个通常只有一个可见文本输入的小应用程序,按回车键会触发 JavaScript 方法,而不会触发正常的表单提交。这是一个非常简单的测试用例:
<form onsubmit="document.write('form submitted!');return false">
<input type="text">
<input type="submit" style="display:none">
</form>
在桌面浏览器上,这按预期工作 - 您输入文本,按 Enter 键,脚本将执行。
但是,在Opera Mobile上,专注于文本输入会弹出一个虚拟键盘;如果您输入文本并触摸"完成",文本将传输到输入字段,但不会提交表单。也没有"输入"
我希望该应用程序在浏览器和设备上的行为方式相同,而不是使提交按钮仅在 Opera Mobile 中可见。
将name
属性添加到文本输入字段中,Opera 将按预期提交表单(它将在虚拟键盘上显示"Go"而不是"完成")。
<input name="whatever" type="text" />
你必须:
- 为您的表单提供 ID
- 赶上歌剧手机下的"完成"事件,恐怕我不知道名字
- 获取具有其 ID 的窗体,并在
done
事件中调用其submit()
方法。
关于活动,我发现了一些信息:
歌剧开发者网站:
Opera Presto 完全支持 DOM 2 事件,无一例外。
http://www.opera.com/docs/specs/presto2.11/dom2/events/
W3C:
6.1.2.4 虚拟键盘和和弦键盘
虚拟键盘是基于软件的键集,具有各种 不同的排列方式,常见于触摸屏设备;他们 通常是模态的,能够在不同的动态之间切换 键集,例如字母键、数字键或符号键。因为 由于缺乏物理限制,这些键盘可能会呈现 最广泛的字符,包括表情符号和其他符号,以及 可能具有未由 Unicode [Unicode] 或密钥表示的键 此规范中定义的值。但是,只要有可能, 虚拟键盘应生成正常范围的键盘事件 和值,以便于创作并与现有 内容。
http://www.w3.org/TR/DOM-Level-3-Events/
基本上,它没有说明任何特定的触摸事件,这与webkit技术不同。因此,您必须抓住按键/向上/向下,解析 keyCode/哪个属性,与"完成"之一进行比较(一些警报会给你好的警报),然后调用 form.submit();
方法。
RGDS。
似乎真的没有办法在Opera Mobile中捕捉到"完成"按键:
- 它不会触发按键/按键,因此无需捕获键码
- 既不模糊/失焦(即使点击"完成",焦点仍留在视场中)
- 更改/输入触发每个键类型(所以这是在"完成"之前的方式)
- 提交事件也永远不会触发
在我看来,唯一的解决方案实际上是显示"Opera Mobile"浏览器的"提交"按钮。