Сначала я немного объясню свою систему здесь.Это форма, позволяющая детям записаться на серию дневных курсов, которые проводятся в школьные пасхальные и летние каникулы.Форма позволяет одновременно регистрировать двоих детей, и если даты обоих детей совпадают, у брата есть скидка в размере 5 фунтов стерлингов за их даты.
В форме есть раздел даты, представляющий собой сериюфлажков.Когда вы ставите флажки, общая цена рассчитывается в нижней части страницы.
Цена на одного ребенка составляет 29 фунтов стерлингов, а коэффициент брака (для тех дат, которые соответствуют первому ребенку) составляет 24 фунтов стерлингов.За бронирование на курс верховой езды взимается дополнительная плата в размере £ 16.50, но эта логическая ошибка распространяется только на выбор даты.
По какой-то причине, которую я не могу понять, в Internet Explorer появляется цена за регистрацию 2 детей.На 5 фунтов меньше, чем должно.Вот мой код для вычисления дат (нижеприведенная функция запускается по нажатию флажка даты):
function processDates(){
//contentsA and contentsB are used for outputting on the email confirmation
valsA = [], dates_A = document.forms['registerForm']['childADates[]'];
for(var iA=0,elmA;elmA = dates_A[iA];iA++) {
if(elmA.checked) {
valsA.push(elmA.value);
}
}
contentsA = valsA.join(', ');
//this generates a string based on what dates were selected i.e. April 18th, April 19th etc.
var valsB = [], dates_B = document.forms['registerForm']['childBDates[]'];
for(var iB=0,elmB;elmB = dates_B[iB];iB++) {
if(elmB.checked) {
valsB.push(elmB.value);
}
}
contentsB = valsB.join(', ');
//same as contentA but for the second child.
//get the total dates for both children
//fullDates is the number of dates selected (number of checkboxes checked)
fullDates = (valsA.length + valsB.length);
siblingDates=0;
//this detects if entries are matching in the two arrays valsA and valsB
for(var i in valsA) {
for(var j in valsB) {
if(valsA[i]==valsB[j]){
//if there are matching dates, increment a siblingDates value to get a total number of matching dates in the siblingDates variable
siblingDates=siblingDates+1;
}
}
}
//get the amount of dates to be charged at £29
fullDates = fullDates - siblingDates;
fullPrice = fullDates*29;
siblingPrice = siblingDates*24;
totalPrice = fullPrice + siblingPrice;
calcTotal();
}
function calcTotal(){
var horseA = parseInt(document.getElementById("horseridingA").value);
var horseB = parseInt(document.getElementById("horseridingB").value);
var horse = parseInt(horseA+horseB);
//Add the horseriding price
overall = parseFloat(horse*16.5)+totalPrice;
//output the overall total to the form
document.getElementById("totalPrice").innerHTML = overall;
}
ОБНОВЛЕНИЕ: Этот процесс запускается, когда пользователь выбирает один из флажковкоторые соответствуют каждой дате.18 апреля [], 19 апреля [] и т. Д. Эти флажки дублируются для второго ребенка.При нажатии на один из флажков запускаются вышеупомянутые функции, которые рассчитывают общую цену в нижней части экрана.В Internet Explorer, щелкнув дату для ChildA, вы получите 24 фунта, а не 29 фунтов стерлингов, а только в первую нажатую дату, все остальные даты, childA и childB, будут рассчитаны правильно.Первый выбор даты на £ 5 меньше, чем должен быть.
Я просто использовал IE, чтобы выбрать первую дату на главной дочерней стороне, и он дал £ 24, затем снял тот же флажок, который дал £ -5
ОБНОВЛЕНИЕ 2: Хорошо!Я сузил проблему до следующего утверждения:
fullDates = (valsA.length + valsB.length);
siblingDates=0;
for(var i in valsA) {
alert(valsA[i]);
for(var j in valsB) {
if(valsA[i]==valsB[j]){
alert("does equal");
siblingDates=siblingDates+1;
}else{
alert("does not equal");
}
}
}
После установки флажка 18-го апреля первое предупреждение (valsA [i]) гласит 18 апреля
Второе предупреждение гласит:"не равно", как и ожидалось.
В Internet Explorer вышеупомянутое происходит нормально, как и ожидалось, но я получаю дополнительный набор предупреждений:
После 2 вышеупомянутых предупреждений я получаю странное предупреждение о функции, котороеОповещения об ошибке длины строки, это примерно четыре строки уменьшенного кода, которые очень трудно расшифровать.
Затем снова появляется то же самое предупреждение.
Затем я получаю "равно"