Hi, Kang-Hao.
On 2011/02/28 21:31, Kang-Hao (Kenny) Lu wrote:
> Hello Makoto,
> (Cc+ public-webapps)
>
> (11/02/25 15:16), Makoto Kato wrote:
>> Hi,
>>
>> This is simple sample. This behavior is different on all web browsers
>> when input element has composition/preedit string for IME.
> A relevant question here, I think, is where the cursor should go when
> the value of the text box is set by script. For Safari5, it always goes
> to the end when the value is set. For FF4.0b11, the cursor stays in
> previous position when the value to be set is the same and goes to the
> end when the value is different. Is this a known incompatibility? I find
> the behavior of FF quite strange.
On Safari 5, even if textbox has IME composition string, text into
textbox can be replaced by DOM/script. But other browser's behaviors
are different, and this is no specification when textbox has composition
string. Although IE, Chrome and Opera keep composition string after
value is replaced by DOM, each behavior is different.
This is the result for this test on each browsers. When textbox has IME
composition string such as ABCDEFG, then script (textbox.value = "123";)
is called, textbox becomes...
1. "123ABCDEFG" (ABCDEFG keeps composition state and caret is after G).
2. "123" (composition string is removed).
3. "ABCDEFG" (ABCDEFG keeps composition state and caret is after G).
Which behavior is right? 1 is Opera 11, 2 is Safari 5, and 3 is Chrome
10 and IE9.
Also, on Firefox/Gecko, since there is some bugs, key input cannot work
until IME is turned off. So to fix this, I am talking with Ehsan about
right specification. But there is no discussion about this
specification/behavior at WHATWG.
>> If input element has composition string by IME, should it cancel
>> composition string and set value by script? Or should it cancel
>> setting value since it has composition string?
> What makes sense to me is:
> 1. the cursor always goes to the end
> 2. the composition string goes with the cursor, which should not change.
>
> But I am not sure whether this is the right way to go.
>
> Cheers,
> Kenny
>>
>> <script>
>> function setvalue() {
>> document.getElementById('test').value = "replaced";
>> }
>> </script>
>> <body onload="setTimeout('setvalue()',5000)">
>> <input type="text" id="test"/>
>> </body>
>>
>>
>> -- Makoto Kato
>>
-- Makoto Kato