(wrong string) 入法打字時 input.value 被更改的鎯呭舰

这确实是个麻烦事,我也遇到过。字打到一半结果因为脚本的关系,光标乱飞或者文字丢失。类似的情况似乎并不仅限于浏览器,比如似乎thunderbird(mozilla出品的mail
client)在用输入法时,光标有一定概率会乱飞。

先说后一个问题。其实我认为当焦点处于文本框时,合理的行为应是不允许脚本修改文本值,比较好的方式是:

1. 阻塞脚本。不过这也会阻塞ui。所以只适用于手机等设备。
2. 设值失败,甚至扔异常 。不过这会导致破坏向前兼容性,也可能因不符合脚本开发者的预期导致程序逻辑错乱。

所以只好在值被修改后将光标移动到最后,这通常不是最终用户期望的。FF的行为是做了少许优化,减少这种对最终用户的干扰,是可取的,其他浏览器可以学习FF。

当使用输入法时,我个人感觉取消输入法已经输入的内容不是很好,会严重干扰最终用户。所以还是和不用输入法时一样,仅仅移动光标到最后。

最终这个问题,需要通过开发者来自行处理解决。当文本框获得焦点时,不直接修改值,而是调用text range相关api及未来的输入法api来做合理的处置。



2011/3/1 Kang-Hao (Kenny) Lu <kennyluck@w3.org>

> 大家好!
>
> 日本 Mozilla 的加藤先生[1][2]提出了以下@個問題:
>
> 當你在一個文字框裡打字而且正用輸入法到一半的時候,如果 script 用更改到了
> 文字框的值,到底該取消輸入法打到一半的字然後改變文字框的內容呢?還是輸入
> 法或檔掉@個 script 呢?或是該發生什麼其他的事?
>
> 請大家玩玩看以下的 HTML 或其變形
>
> <script>
> function setvalue() {
>  document.getElementById('test').value = "replaced";
> }
> </script>
> <body onload="setInterval('setvalue()',2000)">
> <input type="text" id="test"/>
> </body>
>
> 在不同瀏覽器下在文字框裡打字看會發生什麼事。
>
> 一個類似的問題是,當文字框的文字更改時鍵盤指標應該跑到哪裡去的問題。@裡
> 我試了兩個瀏覽器:
>
> - FF4.0b11下,如果值*沒有改變*則指標會停留在原處,改變的話指標會移到最後面。
> - Safari 5下,不管怎麼樣,指標都會移到最後面。
>
> 歡迎補充,另外看看大家覺得怎麼樣的行為才是合理的。
>
> [1]
>
> http://lists.w3.org/Archives/Public/www-international/2011JanMar/thread#msg127
> [2]
> http://lists.w3.org/Archives/Public/public-webapps/2011JanMar/thread#msg694
>
> 此致
> Kenny, W3C
> Twitter: http://twitter.com/kanghaolu
> Plurk: http://www.plurk.com/kennyluck
>
>

Received on Sunday, 8 May 2011 20:26:25 UTC