В общем, мои попытки успехом так и не увенчались. Вот полный код странички, если кто-то захочет протестировать самостоятельно:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<input id="text" onfocus="focused = true;" onblur="focused = false;" style="margin: 20px 0;"><br>
<button onclick="addNumber(1)">1</button> <button onclick="addNumber(2)">2</button> <button onclick="addNumber(3)">3</button><br>
<button onclick="addNumber(4)">4</button> <button onclick="addNumber(5)">5</button> <button onclick="addNumber(6)">6</button><br>
<button onclick="addNumber(7)">7</button> <button onclick="addNumber(8)">8</button> <button onclick="addNumber(9)">9</button><br>
<button onclick="">x</button> <button onclick="addNumber(0)">0</button> <button onclick="">x</button><br>
<script>
var focused = false;
var form = document.getElementById("text");
var IE = top.execScript?true:false; //true только для IE
form.focus();
function addNumber(number) {
form.focus();
if (!IE) {
if (focused) {
var start = form.selectionStart;
var end = form.selectionEnd;
form.value = form.value.slice(0, start) + number + form.value.slice(end);
form.setSelectionRange(start+1, start+1);
form.focus();
}
} else {
if (document.selection.createRange().parentElement().id == "text") {
var select = document.selection.createRange();
select.text = number;
form.focus()
}
}
}
</script>
</body>
</html>
И еще. Обратил внимание, что Хром и фф в случае выделения части введенной информации и клике на цифру корректно заменяет ее (такого поведения я и хочу добиться от всех браузеров), опера НЕ заменяет, но добавляет в конец (судя по всему, она при нажатии кнопки сбрасывает выделение, оставляя только каретку, и в итоге уже в функции начало и конец выделения - одна и та же точка), а вот ИЕ... В общем, вот ИЕ я не понимаю вообще. Он не делает то, что я предполагал, но иногда при нажатии кнопки почему-то (???) вдруг ставит каретку. Я решительно не понимаю, чем руководствуется этот браузер, и никакой закономерности проследить у меня не вышло. Помогите разобраться с этой поганью, пожалуйста...