2013-07-23 3 views
0

У меня есть форма с петлей, и я хотел бы использовать таймер. Проблема находится вне цикла, он работает нормально, но внутри цикла он не работает. Для 3-х входных полей можно увидеть таймер, но при выборе времени он изменит только первый квадрат.Выбор времени внутри цикла для

<?php for ($i = 1; $i <= 3; $i++) { ?> 
Time 
<input type='text' name='timepicker[<?= $i ?>]' class="datepicker_dynamic" id='timepicker[<?= $i ?>]' value=''/> 
<?php } ?> 

<script type='text/javascript'> 
    $(document).ready(function() { 
    $('.datepicker_dynamic').timepicker({ 
     showLeadingZero: false, 
    }); 
}); 

+0

Сделать это легко на себя. Не выводить JavaScript с помощью PHP, за исключением случаев, когда вы назначаете данные. 'echo 'var i =', json_encode ($ i), ';'' (Если вы просто выполняете целые числа, вам не нужно 'json_encode()'. Я всегда использую его при помещении данных в JavaScript, наилучшая практика.) – Brad

+1

Знаете, если вы выполняете '', он все равно будет работать и выглядеть намного чище: D – godfrzero

ответ

2

Я сделал некоторую перекройку в код:

<?php for ($i = 1; $i <= $_SESSION["number"]; $i++) { ?> 
    Time 
    <input type='text' name='timepicker[<?= $i ?>]' id='timepicker_<?= $i ?>' value=''/> 
    <script type='text/javascript'> 
     $(document).ready(function() { 
      $('#timepicker_<?= $i ?>').timepicker({ 
       showLeadingZero: false, 
      }); 
     }); 
    </script> 
<?php } ?> 

Опять же, я согласен с @ Брэдом, что это, вероятно, хорошая идея, чтобы не генерировать такое количество JS без необходимости, особенно когда вы можете сделать следующие результаты с теми же результатами, если все функции datepickers идентичны по функциональности:

<?php for ($i = 1; $i <= $_SESSION["number"]; $i++) { ?> 
    Time 
    <input type='text' name='timepicker[<?= $i ?>]' class="datepicker_dynamic" id='timepicker[<?= $i ?>]' value=''/> 
<?php } ?> 

и использовать следующие JS:

<script type='text/javascript'> 
    $(document).ready(function() { 
     $('.datepicker_dynamic').timepicker({ 
      showLeadingZero: false, 
     }); 
    }); 
</script> 

Edit: В конце концов, проблема закончилась тем, что неправильное использование в PHP с открытым тегом <?. Добавление небольшого объяснения здесь в будущем:

  • <?php ?>: по умолчанию PHP Открытие и закрытие тегов, всегда включен по умолчанию
  • <? ?>: РНР короткой открытой метки. Это может быть отключено по умолчанию, поэтому проверьте свои настройки PHP и включите это, прежде чем использовать его.
  • <?= ?>: стенограмма для <?php echo ?>. Опять же, по умолчанию может быть отключено, поэтому перед использованием используйте свои настройки PHP и включите.

Чтобы включить короткие открытые теги, проверьте файл php.ini для short_open_tag

+0

Спасибо, я пробовал, но все равно имею ту же проблему. это только работа для первого цикла. Если, например, у меня есть 2 ввода, когда я хочу сделать это для второго, он изменит первый, который уже завершен. Нужно ли мне также вводить $ i в класс? – usertfwr

+0

Можете ли вы создать скрипку с выходом кода PHP? Просто скопируйте потолок контура на что-то вроде 3, так что у нас нет сотен ящиков, плавающих вокруг o: – godfrzero

+0

Я редактирую свой вопрос. – usertfwr