我有两个日期数组。我不明白为什么第一个元素有效,第二个元素不起作用。这是相同的功能。第二和第三(第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>
答案 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'];
}