Где проблема в датчике? - PullRequest
0 голосов
/ 10 июня 2010

У меня есть 2 массива для дат. Я не понимаю, почему первый элемент работает, а второй не работает. Это та же функция. Второй и третий (4-й, 5-й ... и т. Д.) Должны работать. Я не понимаю Возможно, это ошибка DatePicker, потому что я также не могу использовать функцию onChange.

[2010,8,10] - [2010,8,15] -> работы [2010,7,10] - [2010,7,10] -> не работает.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<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>

Ответы [ 3 ]

1 голос
/ 10 июня 2010

Мне трудно разбирать блок, но я не думаю, что это имеет значение.Я предполагаю, что это потому, что вы возвращаете false, когда оно не соответствует вашему первому набору дат, поэтому ваш цикл никогда не пройдет первую итерацию.

Я думаю, что вы хотите переместить return false вне вашей петли ...

0 голосов
/ 10 июня 2010

Спасибо, ребята.Я исправил.Еще раз спасибо за помощь.

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'];

}
0 голосов
/ 10 июня 2010

В вашей функции nationalDays вы запускаете цикл, но только когда-либо обрабатываете первую запись в массиве start_date, потому что вы немедленно возвращаетесь из функции независимо от того, является ли условие истинным или ложным (возвращая либомассив [true, 'odd2'] или массив [false, 'odd2'], но в любом случае завершение функции перед обработкой следующей записи).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...