2

我正在创建一个 Zend 表单,我想在其中插入一个日期跨度。该表单使用 jQuery UI 库进行了增强,因此我有一个日期从和一个日期到字段,它们都是 datepicker 元素。这工作正常;这是 Zend_Form 的这一部分:

  // Date range
  $date = $this->getView()->date(time());
  $this->addElement('DatePicker', 'userday_from', array(
     'label'        => 'Datum van',
     'value'        => $date,
     'jQueryParams' => array(
        'defaultDate' => $date,
        'dateFormat'  => $this->getView()->date()->getFormatJquery()
     )
  ));
  $this->addElement('DatePicker', 'userday_to', array(
     'label'        => 'Datum tot',
     'value'        => $date,
     'jQueryParams' => array(
        'defaultDate' => $date,
        'dateFormat'  => $this->getView()->date()->getFormatJquery()
     )
  ));

当第一个日期更改时,我想更新第二个日期。jQuery datepicker 对此有一个 onSelect 事件。但是,我无法向 jQueryParams 添加函数回调:

  $this->addElement('DatePicker', 'userday_from', array(
     'label'        => 'Datum van',
     'value'        => $date,
     'jQueryParams' => array(
        'defaultDate' => $date,
        'dateFormat'  => $this->getView()->date()->getFormatJquery(),
        'onSelect'  => "function(){ alert('test'); }"   // ! is not working
     )
  ));

因此,我尝试在之后添加这个 jQuery '选项',如下所示:

  $this->getView()->jQuery()
     ->addOnload("
        $('#userday_from').datepicker('option', 'onSelect', function(selectedDate){
           alert('test');
        });
     ");

另一方面,这在 document.ready() 函数中添加了新的 jQuery,在我的 datepicker 元素的初始化函数之前,因此也不起作用:

<script type="text/javascript">//<![CDATA[
$(document).ready(function() {
            $('#userday_from').datepicker('option', 'onSelect', function(selectedDate){
               alert('test');
            });
    $("#userday_from").datepicker({"defaultDate":"09-11-2012","dateFormat":"dd-mm-yy"});
    $("#userday_to").datepicker({"defaultDate":"09-11-2012","dateFormat":"dd-mm-yy"});
});
//]]></script>

我不想覆盖 datePicker viewhelper 来破解这样的东西。这是将 2 个表单元素联系在一起的东西,因此将其添加到 Zend_Form init() 函数对我来说似乎是有效的。

4

2 回答 2

1

这是个老问题,但要使用 Zend 的函数回调,请使用 Zend_Json_Expr

在你的情况下:

'onSelect'  => new Zend_Json_Expr("function(){ alert('test'); }")
于 2013-12-30T11:10:15.353 回答
0

这可能并不能真正解决您的问题。但是,我希望它为您指明正确的方向。正如 Benjamin 在这里指出的,ZendX jQuery 将停止使用。他还指出为什么从 ZF 生成 jQuery 代码不是一个好主意。我个人完全同意本杰明的观点。

ZendX_Jquery 默认会生成错误代码。它不仅会生成糟糕的代码,还会让您停止思考您实际在做什么,即将生成哪些代码。此外,它会生成“内联”代码,即它会生成直接嵌入到您的 HTML 代码中的 javascript 代码,因此不会被您的用户浏览器缓存。实际上,我什至不确定它是否会生成不显眼的 JavaScript代码。

综上所述,我强烈建议跳过使用 ZendX_JQuery。

再见,克里斯蒂安

于 2012-11-27T17:34:12.013 回答