2012-02-21 11 views
1

私は、休日を強調表示し、datepicker上の日が上がったときに休日の名前をツールチップとして作成するjquery datepickerカレンダーを作成しようとしています。休日の日付はPHPファイル(holidays.php)から来ました。私の問題は..私はすべての休日を強調表示するように見えることはできません、それはただ一つの日付を強調表示します。具体的には、返された最初の日付だけです。私はnationalDays関数のアレイresult[]内外の値を警告するときjquery datepicker highlight holidays

$(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(); 
     }); 

    }); 



}); 

、格納された値は、正しいと思われました。

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

私はnationalDays関数の下でループのINSIDE result[]の値を警告するとき、いくつかの理由で、それだけで[]配列結果に格納された最初の日付を返します。しかし、なぜ?

誰もがアイデアを持っていますか?私はそれほど感謝します。 :)

答えて

0

私はすでにどこが間違っているか知っています。

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

は、私はちょうどelseステートメントを削除し、それが働いた

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

されている必要があります!