如何将jQuery事件回调函数添加到Zend Form元素

时间:2012-11-09 15:41:07

标签: jquery zend-framework jquery-ui-datepicker zend-form-element

我正在创建一个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()函数似乎对我有用。

2 个答案:

答案 0 :(得分:1)

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

在你的情况下:

'onSelect'  => new Zend_Json_Expr("function(){ alert('test'); }")

答案 1 :(得分:0)

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

ZendX_Jquery默认会生成错误的代码。它不仅会产生错误的代码,还会让你不再考虑你实际在做什么,即会生成哪些代码。而且,它产生&#34;内联&#34;代码,即它将生成直接嵌入HTML代码的javascript代码,因此不会被用户浏览器缓存。实际上,我甚至不确定它是否会生成unobtrusive javascript代码。

总之,我强烈建议跳过使用ZendX_JQuery。

再见    基督教