2017-01-05 2 views
-1

Моя проблема относится только к браузеру Safari.jQuery каждый цикл не увеличивается на сафари

У меня есть сетка с 28 колоннами. Первый столбец содержит имена, а остальные 27 - каждую неделю в течение первых 6 месяцев года с семью маленькими столбцами внутри каждого, представляющими день недели. Каждая строка представляет человека, а сетка подсвечивает, в какие дни люди работают или в отпуске (т. Е. Календарный календарь).

Я использую jQuery для прокрутки сетки и вычисления числа небольших столбцов (например, день недели), которые содержат определенное имя класса, которое идентифицирует, находится ли человек в отпуске. В нижней части сетки я добавляю общее количество на каждый день, показывая, сколько людей работает в этот конкретный день. Каждый цикл петли вертикально вниз по столбцу первого дня каждого человека и добавляет его в массив (т. Е. [5,0,0,0,0]) и повторяется в течение другого 4 дня в будний день (т. Е. [5, 4,5,5,0] перед тем, как перейти к следующему столбцу и повторить процесс. Это массив из 5, поскольку я не вычисляю выходные. В итоге у меня 27 массивов. Затем я перехожу в другой цикл и добавить значения массива на каждый день, которые являются итоги.

function CalculateTotalWorkersPerDay_Name() { 
//Count number of month columns which contains the weeks 
var tdCount = $(".halfYear .outertr:nth-child(2) td.outer").length; 
var sum = 0; 
var count; 
var toolTipContent; 

//iterate based on the amount of date columns 
for (count = 0; count < tdCount; count++) { 
    var totals = [0, 0, 0, 0, 0]; 

    function getTotals() { 
     var tdNum = count + 2; //represents 2nd child as the first is the name fíeld 
     //iterate over every direct tr 
     $(".halfYear tr.outertr").each(function() { 
      $(this).find(".outer:nth-child(" + tdNum + ") .inner tr td").each(function (j) { 
       if ($(this).hasClass("std") || $(this).hasClass("other")) { 
        sum += 1; 
        totals[j] += 1; 
       } 
      }); 
     }); 
     //Insert total values into html 
     $(".totalRow td.outer:nth-child(" + tdNum + ") td.totalSum").each(function (k) { 

      toolTipContent = util.tr("Mon: " + totals[0] + "</br>Tues: " + totals[1] + "</br>Wed: " + totals[2] + "</br>Thurs: " + totals[3] + "</br>Fri: " + totals[4], 
       "Mo: " + totals[0] + "</br>Di: " + totals[1] + "</br>Mi: " + totals[2] + "</br>Do: " + totals[3] + "</br>Fr: " + totals[4], ""); 

      var splitNum = ("" + totals[k]).split(""); 
      if (totals[k] != null) { 
       if (totals[k].toString().length == 2) { 
        $(this).append("<span style='display:block;'>" + splitNum[0] + "</span><span>" + splitNum[1] + "</span>"); 
       } 
       else if (totals[k].toString().length == 3) { 
        $(this).append("<span style='display:block;'>" + splitNum[0] + "</span><span style='display:block;'>" + splitNum[1] + "</span><span>" + splitNum[2] + "</span>"); 
       } 
       else { 
        $(this).append("<span style='display:block;'>" + totals[k] + "</span>"); 
       } 
      } 
      $(".totalSumTable" + count + " ").attr("onmouseover", "Tip('" + toolTipContent + "', OFFSETY, 20)"); 
      $(".totalSumTable" + count + " ").attr("onmouseout", "UnTip()"); 
     }); 
     console.log(totals); 
    } 
    getTotals(count); 
}; 

}

метод работает только с сафари браузер, и я d'on't знаю, почему. В сафари я все еще получаю 27 массивы, но только первый массив (т. е. [0,8,8,8,7]) правильно показывает общее количество. Если кто-то может объяснить, является ли это проблемой для моего кода или проблемы с Safari, что было бы здорово и, конечно же, я могу предоставить дополнительную информацию по запросу. Надеюсь, мой код и проблема достаточно ясны в этот момент, поскольку я действительно не понимаю, что проблема, кроме каждого цикла.

Цифры на изображениях показаны вертикально из-за ограничений по пространству (т. Е. 11 равно 1 под 1).

Chrome: working

Safari: not working

Update: Если я запустить функцию второй раз в консоли, он показывает правильные данные. Когда я отлаживаю код, он также дает правильные данные. Возможно, это связано с тем, когда вызывается функция.

Обновление 2: В каждом цикле ниже комментария «Вставить суммарные значения в HTML», переменная K не приращение что приводит только к первому значению индекса в массиве итоговых будучи добавленным в каждом общей сложности.

+0

Хорошо. Итак, какая отладка вы сделали? У Safari есть встроенный отладчик, который вы можете использовать для перехода через код, проверки значений переменных, следовать логике ... –

+0

В настоящее время я отлаживаю, но я хотел выяснить, есть ли очевидная причина, по которой он не работайте с Safari, о котором я не знаю. –

ответ

0

Проблема заключалась в том, как я выбирал элемент для каждой функции. Я сломал его и зафиксировал итерацию каждого цикла. Теперь он работает во всех браузерах. Трудность с этой проблемой заключалась в том, что когда я отлаживал код в браузере, он работал нормально.

OLD

$(".halfYear tr.outertr").each(function() { 
      $(this).find(".outer:nth-child(" + tdNum + ") .inner tr td").each(function (j) { 
      $(this).find(".inner tr td").each(function (j) { 
       if ($(this).hasClass("std") || $(this).hasClass("other")) { 
        totals[j] += 1; 
       } 
      }); 
     }); 

ОБНОВЛЕНО

$(".halfYear tr.outertr .outer:nth-child(" + tdNum + ")").each(function() { 
      //added below line 
      $(this).find(".inner tr td").each(function (j) { 
       if ($(this).hasClass("std") || $(this).hasClass("other")) { 
        totals[j] += 1; 
       } 
      }); 
     }); 
Смежные вопросы