Я запрограммировал календарь, в котором вы можете нажать на дату, чтобы показать ее. Он отлично работает во всех браузерах, кроме Safari. Я искал ошибку в течение нескольких часов, но я не могу ее найти, мой поиск в google говорит, что мне нужно изменить формат строки даты, но я создаю объект даты непосредственно, не используя строку даты или инициализацию, поэтому должен быть другим способом. Вы нашли ошибку? Я был бы очень благодарен!Javascript - Календарь не работает на Safari
main.html:
<html>
<head>
<script language="javascript" type="text/javascript" src="functions.js"></script>
</head>
<body>
<script>
displayMyDate();
calendar();
</script>
</body>
</html>
functions.js:
var myDate = new Date();
function setStyle(id,style,value)
{
id.style[style] = value;
}
function opacity(el,opacity)
{
setStyle(el,"filter:","alpha(opacity="+opacity+")");
setStyle(el,"-moz-opacity",opacity/100);
setStyle(el,"-khtml-opacity",opacity/100);
setStyle(el,"opacity",opacity/100);
}
function onCalendarClick(date) {
myDate = new Date(date);
var div = document.getElementById('myDate');
if (div != null) {
div.innerHTML = 'Datum: ' + myDate.toLocaleDateString();
}
onReturnToHome();
}
function displayMyDate() {
document.write('<div id="myDate" onclick="onMyDateClick();">Datum: ' + myDate.toLocaleDateString() + '</div>');
}
function calendar(date)
{
if (date == null) var date = new Date();
else myDate =date;
var day = date.getDate();
var month = date.getMonth();
var year = date.getYear();
if(year<=200)
{
year += 1900;
}
months = new Array('January', 'February', 'March', 'April', 'May', 'June', 'Jully', 'August', 'September', 'October', 'November', 'December');
days_in_month = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
if(year%4 == 0 && year!=1900)
{
days_in_month[1]=29;
}
total = days_in_month[month];
var date_today = day+' '+months[month]+' '+year;
beg_j = date;
beg_j.setDate(1);
if(beg_j.getDate()==2)
{
beg_j=setDate(0);
}
beg_j = beg_j.getDay();
document.write('<table class="cal_calendar" onload="opacity(document.getElementById(\'cal_body\'),20);"><tbody id="cal_body"><tr><th colspan="7">'+date_today+'</th></tr>');
document.write('<tr class="cal_d_weeks"><th>Sun</th><th>Mon</th><th>Tue</th><th>Wed</th><th>Thu</th><th>Fri</th><th>Sat</th></tr><tr>');
week = 0;
for(i=1;i<=beg_j;i++)
{
document.write('<td class="cal_days_bef_aft">'+(days_in_month[month-1]-beg_j+i)+'</td>');
week++;
}
for(i=1;i<=total;i++)
{
if(week==0)
{
document.write('<tr>');
}
if(day==i)
{
document.write('<td class="cal_today" onClick="onCalendarClick(\''+ year + '-' + (month+1) + '-' + i + '\');">'+i+'</td>');
}
else
{
document.write('<td onClick="onCalendarClick(\''+ year + '-' + (month+1) + '-' + i + '\');">'+i+'</td>');
}
week++;
if(week==7)
{
document.write('</tr>');
week=0;
}
}
for(i=1;week!=0;i++)
{
document.write('<td class="cal_days_bef_aft">'+i+'</td>');
week++;
if(week==7)
{
document.write('</tr>');
week=0;
}
}
document.write('</tbody></table>');
opacity(document.getElementById('cal_body'),70);
return true;
}
вы получаете какие-либо ошибки на сафари консоли? –
Когда вы нажимаете на другую дату, то он показывает недопустимую дату –
Использование * document.write * для написания фрагментов недопустимого HTML не является хорошей идеей, даже если в конце концов она «действительна» (например, для написания открытого тега таблицы в другом выражении для записи закрывающего тега). Гораздо лучше построить всю строку и использовать один * document.write *, когда он будет завершен.Атрибут * language * для элементов скрипта был устаревшим с HTML 4 и удалялся с тех пор. – RobG