views:

42

answers:

3

I have 2 arrays for the dates. I don't understand why the first element works, and the second doesn't works. That is the same function. Second and third (4th 5th... etc ) should work. I don't understand. Maybe it's bug of datepicker, because I also cannot use the onChange function.

[2010,8,10] - [2010,8,15] -> works [2010,7,10] - [2010,7,10] -> doesn't works.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"&gt; 
<html lang="en">
<head>
    <title>jQuery UI Datepicker - Default functionality</title>

    <link type="text/css" href="js/themes/base/ui.all.css" rel="stylesheet" />
    <script type="text/javascript" src="js/jquery-1.3.2.js"></script>
    <script type="text/javascript" src="js/ui/ui.core.js"></script>
    <script type="text/javascript" src="js/ui/ui.datepicker.js"></script>

<style>
  article, aside, figure, footer, header, hgroup, 
  menu, nav, section { display: block; }
  td.odd, table.ui-datepicker-calendar tbody td.odd a { background: yellow; }
  td.odd2, table.ui-datepicker-calendar tbody td.odd2 a { background: red; bgcolor: red; }
</style>

    <script type="text/javascript">


var start_date = [
 [2010,8,10], [2010,7,10] 
 ];

var end_date = [
 [2010,8,15], [2010,7,15] 
 ]; 

function nationalDays(date) {

var year = 0;
var month = 1;
var day = 2

 for (i = 0; i < start_date.length; i++) {

    if (

        ( ( start_date[i][year] <= date.getFullYear() ) && ( date.getFullYear() <= end_date[i][year] ) ) && 

        ( ( start_date[i][month]-1 <= date.getMonth() ) && ( date.getMonth() <= end_date[i][month]-1 ) ) && 

        ( ( start_date[i][day] <= date.getDate() ) && ( date.getDate() <= end_date[i][day] ) ) 

    ) {  
    //( start_year <= now_year <= end_year )  && ( start_month <= now_month <= end_month )  && ( start_day <= now_day <= end_day )

            return [true, 'odd2'];

    } else { 

            return [false, 'odd2'];

    }           
 }
}

    $(function() {
        $(".datepicker").datepicker({
            beforeShowDay: nationalDays,
            showOn: 'button', buttonImage: 'images/calendar_icon.jpg', buttonImageOnly: true,
            numberOfMonths: 3,
            dateFormat: 'dd/mm/yy',
            showButtonPanel: false,
            closeText: 'X' ,
            currentText: 'Now',
            constrainInput: true,
            stepMonths: 3,
            firstDay: 1,
            monthNames: ['Januar','Februar','Marts','April','Maj','Juni','Juli','August','September','Oktober','November','December'],
            nextText: 'Later',
            prevText: 'Earlier',
            minDate: '-0d',
            maxDate: '+1y'
        });
    });

    </script>
</head>
<body>

<table>
<tr>

    <td><p>Date: <input type="text" name="date2" value="" size="20" readonly="readonly" class="datepicker"></p></td>

</tr>
</table>


</body>
</html>
+1  A: 

I'm having a hard time parsing if block, but I don't think it matters. I'm guessing it's because you're returning false once it doesn't match your first set of dates, so your loop will never get past the first iteration.

I think you want to move the return false outside of your loop...

lc
Thanks. I've fixed the problem.
question_about_the_problem
Do you have any idea for onChange function in datepicker ? Because there is a bug for this function.
question_about_the_problem
@question_about_the_problem What onChange function?
lc
readonly="readonly" class="datepicker" onChange="dates_controls(-1,-1,-1,'triple');">
question_about_the_problem
@lc: that works with manual entry (onChange), but doesn't works with datepicker.
question_about_the_problem
A: 

In your nationalDays function, you're starting a loop, but only ever processing the first entry in the start_date array, because you return from the function immediately regardless of whether the condition is true or false (returning either the [true, 'odd2'] array or the [false, 'odd2'] array, but in either case, terminating the function before processing the next entry).

T.J. Crowder
A: 

Thanks guys. I've fixed. Thanks again for helps.

function nationalDays(date) {

var year = 0;
var month = 1;
var day = 2

 for (i = 0; i < start_date.length; i++) {

    if (

        ( ( start_date[i][year] <= date.getFullYear() ) && ( date.getFullYear() <= end_date[i][year] ) ) && 

        ( ( start_date[i][month]-1 <= date.getMonth() ) && ( date.getMonth() <= end_date[i][month]-1 ) ) && 

        ( ( start_date[i][day] <= date.getDate() ) && ( date.getDate() <= end_date[i][day] ) ) 

    ) {  
    //( start_year <= now_year <= end_year )  && ( start_month <= now_month <= end_month )  && ( start_day <= now_day <= end_day )

            return [true, 'odd2'];

    } //else { 

            //return [false, 'odd2'];
    //}         
 }
            return [false, 'odd2'];

}
question_about_the_problem
you don't have to post this... just accept whoever answered your question... :) cheers!
Reigel
@Reigel: I just want to help to others. if anyone comes to this page for solution He/She will see this changes (:
question_about_the_problem