html-select <option selected = ""> не работает - PullRequest
0 голосов
/ 05 мая 2011

У меня есть 3 html <select> год, месяц и день.Год и месяц автоматически устанавливаются на текущий год и текущий месяц.Я сделал это чисто в PHP.Однако день, который запускается Javascript, похоже, не работает, хотя я уже сделал

if (j == <?php echo date('d') ?>)  days_select.options[days_select.options.length] = new Option(j, j, true);

Днем по умолчанию по-прежнему является 1, а не текущий день.Что даже расстраивает, так это то, что когда я проверял его на firebug, выбранный день был текущим днем ​​... Я абсолютный новичок в программировании, поэтому такие простые вещи мне трудно понять.Просьба помочь ...

date_select.php

<body onload="loadDays();">
 <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++ ) {
      if (j == <?php echo date('d') ?>)  days_select.options[days_select.options.length] = new Option(j, j, true);
      else 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" >

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

Ответы [ 2 ]

1 голос
/ 05 мая 2011

Я помещаю это как отдельный ответ, поскольку он, ну, в общем, один.

Третий параметр Option() - это выбран ли параметр по умолчанию, как если бы он был указан в HTML,Четвертый - выбран ли он на самом деле сейчас.Добавьте еще один true к вашему вызову Option(), и он работает для меня в тестировании.

new Option(j, j, true, true)
1 голос
/ 05 мая 2011

Я думаю, это может быть потому, что <?php echo date('d') ?> создает строку "04" с начальным нулем.Ваш счетчик циклов j является целым числом и никогда не будет соответствовать строке, выводимой PHP.

Попробуйте обернуть его в функцию Javascript parseInt() или используйте date('j') без начального нуля.

if (j == parseInt(<?php echo date('d') ?>))

Еще лучше, просто используйте собственные объекты Date Javascript, чтобы получить текущий день.

var theDateObj = new Date();
var today = theDateObj.getDate(); // Will output int 4 for today.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...