#php #javascript #html-select
#php #javascript #html-выберите
Вопрос:
У меня возникла проблема с тем, как загружать HTML <select>
со значениями при первой загрузке страницы или при обновлении.
На самом деле я пытаюсь создать date_select с 3 выпадающими меню, которые включают год, месяц и дни, в которых при изменении month-menu или year-menu автоматически настраивается количество дней.
Например, когда я выбрал месяц март, дней будет 31, или апрель, дней будет только 30.
Моя проблема в том, что при первой загрузке страницы меню дня пустое. Я пробовал onload
на <select>
, но это не сработало. Я новичок в программировании, поэтому у меня возникают проблемы даже с простыми упражнениями, подобными этому. Пожалуйста, помогите.
date_select.php
<script type="text/javascript" >
function loadDays() {
var year = parseInt(document.getElementById('years').value);
var month = document.getElementById('months').value;
var months = new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
var days = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
if ((year % 4) == 0) days[1] = 29;
var days_select = document.getElementById('days');
days_select.options.length = 0;
for(i in months) {
if (month == months[i]) {
for(var j = 1; j <= days[i]; j ) days_select.options[days_select.options.length] = new Option(j, j);
break;
}
}
}
</script>
<span style="display: table; ">
<span style="display: table-cell; ">
<select id="years" onchange="loadDays();">
<?php
for($year = 1900; $year <= 2100; $year ) {
if ($year == date('Y')) echo "<option value='$year' selected=''>" . $year . "</option>";
else echo "<option value='$year'>" . $year . "</option>";
}
?>
</select>
</span>
amp;nbsp;
<span style="display: table-cell; ">
<select id="months" onchange="loadDays();">
<?php
$months = array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" );
foreach($months as $month){
if ($month == date('M')) echo "<option value='$month' selected=''> " . $month . "</option>";
else echo "<option value='$month'> " . $month . "</option>";
}
?>
</select>
</span>
amp;nbsp;
<span style="display: table-cell; ">
<select id="days" onload="loadDays();">
</select>
</span>
</span>
Ответ №1:
Вам следует рассмотреть возможность использования jQuery, мощной кроссбраузерной библиотеки javascript, которая пытается сделать программирование на javascript более доступным.
Например, он предоставляет функцию, которая ожидает загрузки содержимого DOM перед вставкой в него javascript (и это лучше, чем событие «onload», потому что оно не ожидает загрузки изображений)
В jquery вы (почти) всегда оборачиваете свой javascript в эту функцию
$(document).ready(function(){
//Here goes your code
});
Если вам нужен javascript, вам действительно следует проверить jQuery или другие фреймворки
Ответ №2:
Я думаю, должно быть достаточно, если вы просто переместите свой блок javascript ниже этих интервалов и выделений, а затем вызовете свою функцию сразу после ее объявления.
<span style="display: table; ">
...
</span>
<script type="text/javascript" >
function loadDays() {
...
}
loadDays();
</script>
Ответ №3:
Попробуйте поместить атрибут onload в тег body вместо тега select.
<body onload="loadDays();">