在这里寻找一些关于一个非常奇怪的错误的信息。我自己和另一位同事一直在努力解决这个问题。我已经查看了大部分(如果不是全部)相关的 SO 帖子,但似乎没有一个直接解决这个问题。
我们有一个非常简单的移动网络表单。这个表单的流程是:
Select > Input[type=text] > Select > Select > Input[type=text] > Button
问题来了。当 ios 设备上的用户单击选择时,表单助手会弹出,用户可以选择一个值。
如果用户点击表单助手中的“下一个”箭头,“输入”将获得焦点,键盘打开,用户可以输入。但是,没有任何文本输入被添加到文本输入中。
元素上的一些 jquery 事件和一些日志记录语句验证了这一点。输入实际上正在接收焦点并且正在记录该输入上的每个按键事件但没有文本?!?!?!?
如果用户点击第一个选择,单击“完成”(在表单助手中),然后手动单击以下文本输入,则键输入有效并且文本显示在输入中。
对于按钮之前的第二个文本输入,同样的错误以完全相同的方式发生。如果用户在表单助手中使用“下一步”箭头按钮,则不会将文本附加到实际输入字段。
我有几个使用 javascript 来强制它工作的“黑客”,但如果可以的话,我想避免这种情况。但所有这些都可能会引入其他错误,而且移动版 Safaris 对焦点、模糊和点击事件的处理进一步强化了这一点。
有什么建议吗?
-- 更新--
我在 Apple 支持论坛上发现有人有同样的问题。
https://discussions.apple.com/thread/5527146
事实证明它与 iframe 中的表单有关。此外,点击的第一个输入必须是下拉菜单才能重现问题。
Hi, Below is one of the link where i am facing the problem.
http://182.74.28.109/H3G/Main.html
Steps to reproduce
- Click on the provider Dropdown.
- Select one item from the dropdown.
- Now instead of clicking on the "Done", Click on ">".
- This will move the cusor to Name field.
- Now try to enter some text on the text box.
- Text box will not allow anything to enter.
如果表单不在 iframe 中,则不存在。
我已通过 javascript 确认输入在按下“下一步”按钮后具有焦点。还确认按下的按钮正在注册,但由于某种原因,这些值没有附加到输入本身。
这让我相信这是某种移动 safari 错误,这意味着可能需要一段时间才能出现修复程序,即使有人这样做......并非所有旧设备都会收到它(实际上还不确定是否这存在于 iOS 旧版设备上)。
我有一个基本的概念证明,可以检测按下的字符,解码它们并将它们附加到输入中,但这充其量只是一种黑客攻击。您只能到此为止来模拟 native 功能。我还必须模拟特殊按钮,例如某些输入的退格键和空格键。作为最后的修复,我可能会实现一个插件来完成此操作,但它可能不具备 native 输入的所有功能。我不想走这条路。
最佳答案
思路1)如果把text input换成小textarea,还是不行吗?
想法 2) 创建一个伪造的隐藏输入元素来接收焦点,然后将事件处理程序附加到该输入(从您的帖子看来可以正常工作),这会传递焦点,这不是更容易的黑客攻击吗到你想要的真实输入元素?如果以这种方式完成,聚焦元素是否会正常工作?
关于javascript - 移动版 Safari : iframed form "next-input" on dropdown bug,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19668722/