2012-02-21 11 views
1

Я пытаюсь создать календарь даты jqery datepicker, который выделит праздники и сделает название праздника в качестве подсказки, когда наступит день на datepicker. Даты праздников взяты из файла php (holidays.php). Моя проблема заключается в том, что я не могу выделить ВСЕ праздники, а выделяет только одну дату. Более конкретно, только первая дата возврата.jquery datepicker выделить праздники

$(document).ready(function(){ 
    var holiDays = (function() { 
    var val = null; 
    $.ajax({ 
     'async': false, 
     'global': false, 
     'url': 'holidays.php', 
     'success': function (data) { 
     val = data; 
     } 
    }); 
    return val; 
    })(); 

    var result = []; 
    var holiDays = holiDays.split(','); 

var s, k; 

    for (s = 0, k = -1; s < holiDays.length; s++) { 
     if (s % 4 === 0) { 
      k++; 
      result[k] = []; 
     } 

     result[k].push(holiDays[s]); 
    } 

    // This for loop is to check whether the values stored in result[] are correct 

    for (i = 0; i < result.length; i++) { 
    var f=result[i][0]+"-"+result[i][1]+"-"+result[i][2]; 
    alert(f); 
    } 


    function nationalDays(date) { 
    var m = date.getMonth(); 
    var d = date.getDate(); 
    var y = date.getFullYear(); 

    for (i = 0; i < result.length; i++) { 
    var f=result[i][0]+"-"+result[i][1]+"-"+result[i][2]; 
// WHEN I ALERT THE VALUE OF f HERE, 
// IT ALWAYS DISPLAY THE FIRST VALUE IN THE RESULT ARRAY. WHY? 
alert(f); 

    var d = new Date(f); 

       if (date.getFullYear() == d.getFullYear() 
         && date.getMonth() == d.getMonth() 
         && date.getDate() == d.getDate()) { 
        return [true, 'holiday', result[i][3]]; 
       } else { 
        return [true]; 
       } 
       } 

    } 


    $(function() { 
     $('input.pickerClass').live('click', function() { 
      $(this).datepicker({dateFormat: 'yy-mm-dd', beforeShowDay: nationalDays }).focus(); 
     }); 

    }); 



}); 

когда я предупрежу значения внутри массива result[] снаружи функции nationalDays, значение, хранящееся казалось правильными.

for (i = 0; i < result.length; i++) { 
    var f=result[i][0]+"-"+result[i][1]+"-"+result[i][2]; 
    alert(f); 
    } 

, но по какой-то причине, когда я предупрежу значения result[] ВНУТРИ для цикла под функцией nationalDays, он возвращает только первую дату, сохраненную в результате массива []. Но почему?

У кого-нибудь есть идеи? .. Я был бы очень признателен. :)

ответ

0

Я уже знаю, где я ошибся.

if (date.getFullYear() == d.getFullYear() 
         && date.getMonth() == d.getMonth() 
         && date.getDate() == d.getDate()) { 
        return [true, 'holiday', result[i][3]]; 
       } else { 
        return [true]; 
       } 

Должно быть

if (date.getFullYear() == d.getFullYear() 
         && date.getMonth() == d.getMonth() 
         && date.getDate() == d.getDate()) { 
        return [true, 'holiday', result[i][3]]; 
       } 
        return [true]; 

Я только что удалили заявление еще и это сработало!

Смежные вопросы