- From: John Hax <johnhax@gmail.com>
- Date: Mon, 9 May 2011 04:25:57 +0800
- To: "Kang-Hao (Kenny) Lu" <kennyluck@w3.org>
- Cc: (wrong string) 樂會ML <public-html-ig-zh@w3.org>
- Message-ID: <BANLkTikFTf_aTz3p0d0hZ4gYKfVAqnR5tQ@mail.gmail.com>
这确实是个麻烦事,我也遇到过。字打到一半结果因为脚本的关系,光标乱飞或者文字丢失。类似的情况似乎并不仅限于浏览器,比如似乎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