datepicker中的问题在哪里?

时间:2010-06-10 09:31:53

标签: javascript jquery datepicker

我有两个日期数组。我不明白为什么第一个元素有效,第二个元素不起作用。这是相同的功能。第二和第三(第4个第5 ......等)应该有效。我不明白。也许是datepicker的bug,因为我也不能使用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 个答案:

答案 0 :(得分:1)

我很难解析if block,但我认为这不重要。我猜这是因为一旦它与你的第一组日期不符,你就会返回false,所以你的循环永远不会超过第一次迭代。

我想你想把return false移到你的循环之外......

答案 1 :(得分:0)

nationalDays函数中,您开始循环,但只处理start_date数组中的第一个条目,因为无论条件是否为真,您都会立即从函数返回false(返回[true, 'odd2']数组或[false, 'odd2']数组,但无论如何,在处理下一个条目之前终止函数。)

答案 2 :(得分:0)

谢谢你们。我修好了。再次感谢您的帮助。

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

}