Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/462.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript ZF2 jQuery日期选择器不在ajax对话框中工作_Javascript_Php_Jquery_Zend Framework2 - Fatal编程技术网

Javascript ZF2 jQuery日期选择器不在ajax对话框中工作

Javascript ZF2 jQuery日期选择器不在ajax对话框中工作,javascript,php,jquery,zend-framework2,Javascript,Php,Jquery,Zend Framework2,我的zend framework 2 web应用程序上的某些操作通过对话框打开。我在处理使用ajax调用的操作时使用此方法: /** * Display content only on ajax call. * @param \Zend\Mvc\MvcEvent $e */ public function onDispatch(\Zend\Mvc\MvcEvent $e) { $app = $e->getParam('application'); $layout =

我的zend framework 2 web应用程序上的某些操作通过对话框打开。我在处理使用ajax调用的操作时使用此方法:

/**
 * Display content only on ajax call.
 * @param \Zend\Mvc\MvcEvent $e
 */
public function onDispatch(\Zend\Mvc\MvcEvent $e)
{
    $app = $e->getParam('application');
    $layout = $app->getMvcEvent()->getViewModel();
    if($app->getRequest()->isXmlHttpRequest()) {
        $controller = $e->getTarget();
        $controller->layout('application/ajax/ajax');
        $layout->setTerminal(true);
    }
}
问题是jquery的日期时间选择器似乎不起作用。因为这个HTML会被动态添加到页面中

我认为一个解决方案可能是修改这个
onDispatch
方法,以便它还重新包含一些JS文件。还是有更好的办法?我只是认为将硬编码的JS文件添加到我的
ajax.phtml
文件中也可以


但是,我想知道是否有更好的方法存在,比如在页面上重新加载js或者其他什么

是的,一种方法是将脚本添加到ajax.phtml中

我刚才做的一件事是将所需脚本作为响应头发送:

$requiredScripts = array(
    '/some/js/file.js',
    '/another/js/file.js'
);
$this->getResponse()->getHeaders()
    ->addHeaderLine('x-scripts: ' . json_encode($requiredScripts));
然后在js中:

// globally listen for the ajax-requests
$(document).ajaxSuccess(function(res, status, xhr) { 
    var requiredScripts = xhr.getResponseHeader("x-scripts");
    if (requiredScripts) {
        jQuery.each(requiredScripts, function(index, scriptSrc) {
            jQuery.getScript(scriptSrc);
        });
    }
});

事实证明,不需要在ajax.phtml视图上重新加载JS文件。我只是在jquery($.get)ajax调用的onready事件中再次调用initDatePickers()函数。现在,日期选择器在对话框本身中工作正常。如果问题是您的事件没有触发,因为元素是在您注册事件之后创建的,那么您可以使用
$(document)而不是
$('.date picker')。单击(函数(evt){…})