【问题标题】:Time picker inside a loop for循环内的时间选择器
【发布时间】:2013-07-23 02:26:25
【问题描述】:

我有一个带有循环的表单,我想使用时间选择器。问题出在循环外它工作正常,但在循环内它不起作用。 对于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,
        });
    });
</script>

【问题讨论】:

  • 自己轻松搞定。不要使用 PHP 输出 JavaScript,分配数据时除外。 echo 'var i = ', json_encode($i), ';'(如果你只是在做整数,你不需要json_encode()。作为最佳实践,我总是在将数据放入 JavaScript 时使用它。)
  • 你知道,如果你这样做&lt;?php if [condition] { ?&gt; &lt;!-- Regular HTML/JS code --&gt; &lt;?php } ?&gt;,它仍然可以工作并且看起来更干净:D

标签: php javascript loops timepicker


【解决方案1】:

我对您的代码做了一些重新安排:

<?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 } ?>

再次,我同意@Brad 的观点,即最好不要不必要地生成这么多 JS,尤其是当所有日期选择器的功能都相同时,您可以执行以下操作并获得相同的结果:

<?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>

编辑:最后,问题最终是PHP打开标签&lt;?的不当使用。在此处添加一个小说明以供将来参考:

  • &lt;?php ?&gt;:默认php打开和关闭标签,默认一直开启
  • &lt;? ?&gt;:php 短开标签。这可能在默认情况下被禁用,因此请检查您的 PHP 设置并在使用前启用它。
  • &lt;?= ?&gt;&lt;?php echo ?&gt; 的简写。同样,默认情况下可能已禁用,因此请检查您的 PHP 设置并在使用前启用。

要启用短打开标签,请检查 PHP.ini 文件中的 short_open_tag

【讨论】:

  • 谢谢,我试了一下,还是有同样的问题。它仅适用于第一个循环。例如,如果我有 2 个输入,当我想为第二个输入时,它会更改已经完成的第一个。我还需要在课堂上放 $i 吗?
  • 你能设置一下 PHP 代码的输出吗?只需先将循环上限硬编码为 3 之类的东西,这样我们就不会在 o 周围漂浮数百个框:
  • 我为您创建了一个fiddle,它似乎工作正常。由于您尚未发布 PHP 代码的输出,因此我无法帮助您调试它。只需检查小提琴中的 HTML 是否与您的 PHP 输出相似。当您使用它时,请检查您的控制台是否有任何错误。
  • 对不起,我不知道小提琴是什么。我检查了你做了什么,它可以工作,但是如果你做一个循环而不是有不同的数字,它就不再工作了,这是我的问题
  • 再次,我们需要查看 HTML 输出。您可以编辑我创建的小提琴,单击顶部的Update 并将链接发布到更新小提琴,或者您可以使用 PHP 代码生成的 HTML 输出更新您的问题。这应该可以帮助每个人更清楚地理解问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-08-20
  • 1970-01-01
  • 2023-04-06
  • 1970-01-01
  • 1970-01-01
  • 2015-12-10
  • 1970-01-01
相关资源
最近更新 更多