HTML <textarea> </textarea>中的RTL(从右到左)键盘导航

时间:2010-07-28 20:10:51

标签: navigation keyboard textarea right-to-left keyboard-navigation

我正在处理一些包含<textarea>的HTML。目前,我正在测试基于LTRRTL的混合字符的输入,例如"abcأبجABC"

<div class="mycomment" dir="RTL">
  <form method="get" action="{$self}">
    <input type="hidden" name="Id" value="{$entry}" />
    <textarea name="comment" class="commentarea"/></textarea>
    <br />
    <input class="button" type="submit" value="{$postlink}" />
  </form>
</div>

RTL模式下,字符串的显示是正确的,但键盘导航不正确。具体来说,在浏览英语和阿拉伯语字符串部分时,它没有遵循正确的顺序。

我有什么想法可以绕过或解决这个问题?

3 个答案:

答案 0 :(得分:1)

不幸的是,根据规格,键盘导航可能是“正确的”。当试图通过混合方向单词,键盘快捷键(如 Ctrl + &gt; )来逐字跳转时,根据字符的方向性开始改变方向在光标的当前位置下 - 而不是从导航的角度将整个字符串视为单向。

但是,当您考虑在输入混合模式句子时计算机需要如何解释所有其他键击时,这是可以理解的。

如果您开始输入LTR个字符,则预计它们会从左向右移动(每个后续字符都显示在最后一个字符的右侧)。但是,如果您开始输入RTL个字符,则您希望它们从右向左行进(每个后续字符都显示在最后一个字符的左侧)。

这样想:

Ctrl + &gt; 并不意味着“走右一个字” - 这意味着“转到下一个字”。在RTL环境中, next 字是 left - 因此键盘会向您跳转。

Next ,实质上与 bytes 在内存中的保存顺序有关,而不是与字符的顺序相关显示在屏幕上。无论一个单词是从屏幕的右侧还是左侧开始,字符都按顺序保存在内存中,从单词的开头开始,到单词的结尾结束。

换句话说: Ctrl + &gt; 字节顺序行进,而不是 display-order

那么 - 回到你如何克服它的问题......

除非您要编写一些相当复杂的JavaScript(包含其自身的一系列挑战和麻烦)来改变键盘导航在您的盒子中的工作方式,否则没有好办法“修复”它。但是,如果您认为它会对您的客户产生负面影响,您可以尝试以下备选方案:

  1. 提供培训。了解古怪的键盘技巧,并教你的用户。 (我知道,我知道,很多工作,你可能没有时间/预算)。
  2. 信任您的用户。如果您的用户在您的应用程序中输入混合LTRRTL文本,则可能会在其他应用程序中定期执行此操作。这意味着他们可能习惯于这一系列问题,因为它是一组标准问题。如果他们做了很多 - 他们可能已经有了他们习惯的解决方法 - 你更改修复它可能实际上伤害他们的生产力。
  3. 记录提交功能请求。如果您认为这是某个给定的浏览器供应商(如Microsoft)应该以不同方式实现,请在其用户社区中激活并推送更新,补丁和功能添加。这就是软件世界变得更好的原因 - 并且它不会仅仅在您的组织上承担变革代理的负担,或者更糟糕的是 - 在您身上。

答案 1 :(得分:0)

其实你不能这样做。 作为希伯来语的人,我可以告诉你,这个领域存在很多问题,特别是当你混合RTL和LTR语言或有时候数字时。 你无能为力。有时浏览器可以处理它,有时它不能。 例如,在Chrome中使用 Ctrl 键在希伯来语文本中更快地移动时,左右键的方向会改变为相反的方向。

答案 2 :(得分:0)

您需要做的就是添加div样式:

<div style="direction:ltr">
<textarea id="geometry" class="form-control" placeholder="Lat lon" rows="3"></textarea>
</div>