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">
<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','Ma开发者_JAVA百科rts','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>
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...
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).
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'];
}
精彩评论