Chrome では、要素の内容がプログラムによって変更された後、入力要素に対して元に戻すが正しく機能しないことに気付きました。ブラウザーごとに異なる動作が得られますが、Chrome ほど悪くはありません。
FF20 good
IE9 some support (undo stack cleared when input loses focus)
Safari5 some support (undo stack cleared when input loses focus)
Chrome26 unreliable
たとえば、スペースを削除するスクリプト (以下の jsfiddle も参照)
- 「hello!」の前にスペースを入力してください。
- 入力要素の外側をクリック
- 入力要素をクリックして Ctrl-Z を押します
今、テキストはなくなっています(丁目で)
<input type="text" id="input1" value="hello!">
document.getElementById("input1").addEventListener('blur', function(evt){elementLosesFocus(evt, this);}, false);
function elementLosesFocus(evt, caller)
{
caller.value = caller.value.trim();
}
私が期待できる最善のことは、入力がフォーカスを失ったときに入力の元に戻す履歴を何らかの形でクリアする方法だと思います(IEやSafariの場合のように)。