【问题标题】:How can I pass PHP variable to Datepicker in jQuery?如何在 jQuery 中将 PHP 变量传递给 Datepicker?
【发布时间】:2014-12-05 15:06:25
【问题描述】:

我正在尝试使用我从 PHP 传递到 html 的变量在 datepicker 中设置默认日期。这是我的控制文件和表单的简化版本:

控制文件:

<?php
  function render($template, $values = []) {        
      // extract variables into local scope
         extract($values);           

      // render template
         require("$template");
}

  $default_date = date("m/d/Y") ;       
  $default_date = strtotime($default_date);
  $default_date = $default_date + 604800;
  $default_date = date("Y,m-1,d",$default_date);
  render("index_month2_form.php",['default_date'=> $default_date]);
?>

这是表格:

<!doctype html>
<html lang="en">
 <head>
  <?php print "$default_date"; ?> 
  <meta charset="utf-8">
  <title>jQuery UI Datepicker - Default functionality</title>
  <link rel="stylesheet" href="jqueryui/css/swanky-purse/jquery-ui-1.10.4.custom.css">
  <script src="/jqueryui/jquery-1.11.1.min.js"> </script>
  <script src="jqueryui/js/jquery-ui-1.10.4.custom.min.js"></script>  
  <script type="text/javascript">
      $(function() { 
       $("#mydate").datepicker ({
          onSelect: function(dateText, inst) {
                 var dateAsString = dateText;     
                 var date = $('#mydate').val();       
          }
       }) 
       //.datepicker("setDate",new Date());  
       .datepicker("setDate",new Date(2014,10-1,17));  
      });  
  </script>   
 </head>
 <body> 
  <p>Date: <input type="text" id="mydate"></p> 
 </body>
</html>

如果我使用 setDate 的注释行,我会得到当前日期。如果我使用我拥有的线路,我会提前 7 天得到日期。当我在表单顶部打印 $default_date 时,我得到 2014,10-1,17 但我无法将其传递到脚本中。其他人建议使用

【问题讨论】:

  • 其他人建议使用
  • HTML 表单的 PHP 代码中有一个额外的右括号“)”。我为你修好了。
  • 谢谢,但你能告诉我额外的“)”所在的确切行吗?我在我的代码中找不到它??
  • 没关系,这是我的错。没有额外的“)”。很抱歉造成混乱。

标签: javascript php jquery datepicker


【解决方案1】:

使用回声是要走的路。
我宁愿把它放在脚本中而不是输入中
我假设$default_date === "2014,10-1,17"

$(function() { 
       $("#mydate").datepicker ({
          onSelect: function(dateText, inst) {
                 var dateAsString = dateText;     
                 var date = $('#mydate').val();       
          }
       }) 
       //.datepicker("setDate",new Date());  
       .datepicker("setDate",new Date(
<?php
     $date = explode(',', $default_date);
     echo $date[0] .  ',' . $date[1] . ',' . $date[2]; 
?>
     ));  
};  

编辑:
正如 rss81 注意到的那样,解构字符串以重建完全相同的字符串是非常愚蠢的。我不知道我在想什么...
尽管如此,出于教育目的,我还是让它这样吧。

分解字符串使我们能够得到一个由逗号分隔的每个块的字符串数组。您可以使用它来重新排序字符串。例如,如果您想将“2014,10-1,17”转换为“10-1,2014,17”,这将由 echo $date[1].','.$date[0].','.$date[2] 完成

Echo 使我们能够根据需要输出 html 页面,使其具有动态性。所以这里我们通过 php 对 .datepicker() 的日期参数进行预处理。

【讨论】:

  • @rss81 我会在有时间的时候添加解释,以便您了解发生了什么;)
  • 非常感谢您的帮助。
  • 嗨,由于 $default_date 已经是正确的格式,我发现以下方法也可以:
  • @rss81 正确!你理解我看到的代码,很好:) 我按照承诺更新了答案
【解决方案2】:

更好的解决方案是将返回的 PHP 日期变量分配给 jQuery 变量。

这可以通过以下方式完成

var phpDate = "<?php echo $default_date; ?>";

现在,您需要将其分配给日期选择器

$("#mydate").datepicker("setDate",phpDate); 

这行得通...

【讨论】:

  • 你在哪里放置 var phpdate 行?
  • 在 setDate 行中 phpdate 必须是一个日期对象,所以这不起作用。 Guillaume 下面的解决方案有效,但所有其他响应均无效。非常感谢大家的帮助
  • 这几乎可以工作并且很优雅。将var phpDate 放在$("#mydate").datepicker{ 之前并将其更改为var phpDate = new Date("&lt;?php echo $default_date;?&gt;");
  • 或者把$('#mydate')[...]改成$('#mydate').datepicker('setDate', new Date(phpDate));看你更喜欢什么
  • 你需要将它放在
【解决方案3】:

您需要在 javascript 部分设置日期格式,因为它是创建和日期问题。

你可以在下面设置它

$("#datepicker").datepicker("option", "dateFormat", "yy-mm-dd ");

【讨论】:

    【解决方案4】:

    您可以在 html 元素的数据属性中传递 $default_date 值。例如:

    <p id="myDate" data-date="<?php echo $default_date; ?>"></p>
    

    之后,您可以使用 Jquery 像这样提取它:

    var date = $("#myDate").data("date");
    

    【讨论】:

    • 我试过了,但它不起作用。这太令人沮丧了。你在哪里放置 var 行?日期应该是什么格式?
    • 好吧,我不知道datepicker接受的具体格式,但是你可以在你调用datepicker的匿名javascript函数中定义变量date。我认为 $default_date 变量的格式已经正确。
    【解决方案5】:

    您可以不在脚本中使用&lt;?php echo,而是在正文中,在某些带有id 的display:none 元素中使用。然后只是从该元素中使用 javascript 获取日期并设置为 datapicker

    【讨论】:

      【解决方案6】:

      只需给输入相对值

      <input type="text" id="mydate" value="<?php echo $yourdate; ?>">
      

      这将使用您的日期值初始化日期选择器

      希望这对您有所帮助,如果这不是您想要的,我深表歉意

      【讨论】:

      • 我试过了,它只是默认为当前日期。它不起作用,但感谢您尝试
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-19
      • 2015-11-05
      • 1970-01-01
      • 1970-01-01
      • 2013-06-01
      • 1970-01-01
      相关资源
      最近更新 更多