Как загрузить HTML <select>со значениями при загрузке страницы с использованием JavaScript в PHP? - PullRequest
3 голосов
/ 04 мая 2011

У меня проблема с тем, как загрузить HTML <select> со значениями при первой загрузке страницы или при обновлении.

Я на самом деле пытаюсь создать выбор date_select с 3 выпадающими меню, которые включают год, месяц и дни, в которые при изменении меню месяца или года автоматически настраивается количество дней.

Например, когда я выбрал месяц март, дни будут 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>
 &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>
 &nbsp;
 <span style="display: table-cell; ">
  <select id="days" onload="loadDays();">

  </select>
 </span>
</span>

Ответы [ 3 ]

4 голосов
/ 04 мая 2011

Вам следует рассмотреть возможность использования jQuery , мощной и кросс-браузерной библиотеки javascript, которая пытается сделать программирование javascript более доступной.

Например, она предоставляет функцию, которая ожидает DOM-контентбыть загруженным перед вставкой в ​​него javascript (и это лучше, чем событие "onload", потому что оно не требует загрузки изображений)

В jquery вы (почти) всегда заключаете свой javascript в эту функцию

$(document).ready(function(){
         //Here goes your code
});

Если вам нужен javascript, вы действительно должны проверить jQuery или другие фреймворки

3 голосов
/ 04 мая 2011

Я думаю, этого будет достаточно, если вы просто переместите свой блок javascript ниже этих диапазонов и выделений, а затем вызовете свою функцию сразу после ее объявления.

<span style="display: table; ">
...
</span>

<script type="text/javascript" >

 function loadDays() {
 ...
 }

 loadDays();
</script>
1 голос
/ 04 мая 2011

Попробуйте добавить атрибут onload в тег body вместо тега select.

<body onload="loadDays();">
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...