Приветсвую, форумчане, знатоков и не очень
С наступающим(или наступившим)
Выполняю задачку по учебнику М. Моррисона и код, в принципе, работает. Но столкнулся с разным поведением поля input type='number' в разных браузерах(корректно работает только в Opera, в Хром, FF, IE9 - поведение одинаковое). А именно:
- при повторном вводе значения в input скрипт не работает в случае, если введенное значение совпадает с предыдущим. Не имеет значения, было число стерто и введено, выделено текущее и введено новое, установлена ли галочка, которая отвечает за пересчет значений, если вводимое число совпадает с предыдущим - пересчета не происходит
Текущая реализация в действии
http://max4396.narod2.ru/JS/Dunkans_...uncanForm.html
текст скрипта в HTML, CSS, JS -
http://jsfiddle.net/4h9SU/
Объясните, пожалуйста, такое поведение - это особенности браузера или выполняемого скрипта? Скажите куда копать, а с остальным разберусь, надеюсь, сам
P.S. Решение найдено. Добавлено событие обработки в checkbox. Вот так бывает, стоит задать вопрос и уже знаешь ответ
А различное поведение все равно не понятно
function initForm(){
document.getElementById('name').focus('name');
document.getElementById('subtotalField').value = "0.00";
document.getElementById('totalField').value = "0.00";
document.getElementById('taxField').value = "0.00";
updateOrder();
}
function clickName(){
document.getElementById('name').value = "";
}
function updateOrder(){
/*Константы*/
var TAXRATE = 0.095;
var DONUTPRICE = 0.5;
var name = document.getElementById('name').value;
if(!name)
{ document.getElementById('name').value ="Введите ваше имя";
document.getElementById('name').style.color = '#070';
document.getElementById('name').style.fontStyle = 'italic';
}
var numCakeDonuts = parseInt(document.getElementById('cakeDonuts').value, 10);
var numGlazedDonuts = parseInt(document.getElementById('glazedDonuts').value, 10);
if(isNaN(numCakeDonuts)) numCakeDonuts = 0;
if(isNaN(numGlazedDonuts))numGlazedDonuts = 0;
if(document.getElementById('checkbox_ed_cakeDonuts').checked)
{ numCakeDonuts = parseInt(document.getElementById('cakeDonuts').value, 10)*10;
}
if(document.getElementById('checkbox_ed_glazedDonuts').checked)
{ numGlazedDonuts = parseInt(document.getElementById('glazedDonuts').value, 10) * 10;
}
// alert(numCakeDonuts +', ' + numGlazedDonuts);
var pickUpMinutes = parseInt(document.getElementById('pickUpMinutes').value, 10);
var subtotal = (numCakeDonuts + numGlazedDonuts) * DONUTPRICE;
var tax = subtotal * TAXRATE;
var total = subtotal+ tax;
if(isNaN(pickUpMinutes))
{ document.getElementById('pickUpMinutes').value = "Введите время";
document.getElementById('pickUpMinutes').style.color ='#070';
document.getElementById('pickUpMinutes').style.fontStyle ='italic';
}
document.getElementById('subtotalField').value = subtotal.toFixed(2);
document.getElementById('taxField').value = tax.toFixed(2);
document.getElementById('totalField').value = total.toFixed(2);
}