Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/280.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
Php YII:Renderpartial不生成javascript?_Php_Yii - Fatal编程技术网

Php YII:Renderpartial不生成javascript?

Php YII:Renderpartial不生成javascript?,php,yii,Php,Yii,我正在调用一个ajax函数,该函数生成一个按钮: $html = $this->renderPartial( '/cart/_cartItem', array( 'data' => $data, ) , true ); 问题是,如果我打印出$html,我会看到按钮,但使按钮正常工作的相关javascript并不存在。有没有一种方法可以强制渲染包含必要的javascript,从而使此按钮100%工作?将javascript放在包含按钮的页面上(不使用…),但用于ex Yii:

我正在调用一个ajax函数,该函数生成一个按钮:

$html = $this->renderPartial( '/cart/_cartItem',  array( 'data'   => $data,  ) , true );

问题是,如果我打印出$html,我会看到按钮,但使按钮正常工作的相关javascript并不存在。有没有一种方法可以强制渲染包含必要的javascript,从而使此按钮100%工作?

将javascript放在包含按钮的页面上(不使用…),但用于ex

Yii::app()->clientScript->registerScript('toggle', "

$('#clearDate').click(function() {
$('#Project_start_date').val('');
});

");

如果它仍然无法工作,请尝试在javascript中包含document.ready

我通过做两件事来修复它:

首先,通过将进程$OutputRigger设置为true来包含所有javascript

$html = $this->renderPartial( '/cart/_cartItem',  array( 'data'   => $data,  ) , true, **true** );
第二,它还增加了这一点:

<link rel="stylesheet" type="text/css" href="/easionline2/www/assets/9bdc3248/css/bootstrap-yii.css" />
<script type="text/javascript" src="/easionline2/www/assets/1dffa579/jquery.js"></script>
<script type="text/javascript" src="/easionline2/www/assets/9bdc3248/js/bootstrap.js"></script>

我做了一个黑客来摆脱这个:

$start = strpos($html, '<div class="cartItem');
$end = strlen($html) - $start;
$html = substr($html, $start , $end );

$start=strpos($html,问题已经得到了回答,但这是相关的,可能会派上用场

与renerPartial()一起注意在Yii中使用AJAX调用。众所周知,Yii没有正确解释AJAX引入的新视图之外的javascript。如果您正在加载一个小部件,或者是重新加载jQuery或其他JS文件的东西,那么在AJAX调用之前最初加载到页面上的jQuery将被遗忘,并且所有的委托都将被删除我也忘记了。这段JS代码设置了所有AJAX调用,以去除新HTML中加载已加载JS文件的任何JS脚本。将其放入主视图:

<script>
$.ajaxSetup({
global: true,
dataFilter: function(data,type){
    //  only 'text' and 'html' dataType should be filtered
    if (type && type != "html" && type != "text")
    {
                return data;
    }

    var selector = 'script[src]'; // copy-paste the following back in after [src] if you also want stylesheets blocked too: ,link[rel="stylesheet"]

        // get loaded scripts from DOM the first time we execute.
        if (!$._loadedScripts) {
        $._loadedScripts = {};
        $._dataHolder = $(document.createElement('div'));

                var loadedScripts = $(document).find(selector);

        //fetching scripts from the DOM
            for (var i = 0, len = loadedScripts.length; i < len; i++) 
        {
                    $._loadedScripts[loadedScripts[i].src] = 1;
                }
        }

    //$._dataHolder.html(data) does not work
    $._dataHolder[0].innerHTML = data;

    // iterate over new scripts and remove if source is already in DOM:
    var incomingScripts = $($._dataHolder).find(selector);
    for (var i = 0, len = incomingScripts.length; i < len; i++)
    {
        if ($._loadedScripts[incomingScripts[i].src])
        {
                    $(incomingScripts[i]).remove();
                }
                else
                {
                    $._loadedScripts[incomingScripts[i].src] = 1;
                }
        }

    return $._dataHolder[0].innerHTML;
}
});
</script>

$.ajaxSetup({
全球:没错,
dataFilter:函数(数据,类型){
//只应筛选“文本”和“html”数据类型
if(type&&type!=“html”&&type!=“text”)
{
返回数据;
}
var selector='script[src]';//如果您还想阻止样式表,请将以下内容复制粘贴回[src]之后:,link[rel=“stylesheet”]
//第一次执行时从DOM获取加载的脚本。
如果(!$。\u加载脚本){
$.\u loadedScripts={};
$。_dataHolder=$(document.createElement('div');
var loadedScripts=$(文档).find(选择器);
//从DOM获取脚本
对于(var i=0,len=loadedScripts.length;i
在局部视图中,可以将jquery.js和bootstrap.js的
scriptMap
值设置为false,请参阅