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

Reply via email to