ajax - ajaxupdate 后 gridview 中的 css 不显示

标签 ajax css yii cgridview

gridview 中,我有一个基于 css 的内联图。一切正常,直到我过滤了一些东西并且 gridview 得到更新。然后 css 不再在网格内注册。有人知道解决方案吗?老实说,我什至不知道在这种情况下该尝试什么。 css 不是我的强项之一。


这是 ajaxupdate 之前的元素:

this is the element before ajaxupdate


这是ajax更新后的

enter image description here

.stat-block .stat-graph {
background: none repeat scroll 0 0 #FFFFFF;
border: 1px solid #D7D7D7;
border-radius: 3px;
margin-right: 10px;
padding: 10px 10px 8px;
text-align: center;
width: auto;

据我所知,第一次生成网格时,css 会生成一个像这样的 Canvas 标签

<canvas style="display: inline-block; width: 29px; height: 20px; vertical-align: top;" width="29" height="20"></canvas>

但是在 ajax 更新和 gridview 刷新之后,该标签将不再出现。

我曾尝试将图形数据放入 canvas 标签中,但没有成功。

这是 GridView 代码:

this->widget('zii.widgets.grid.CGridView', array(
'id' => 'cartuse-grid',
'dataProvider' => $model->search(),
'filter' => $model,
'afterAjaxUpdate' => 'reinstallDatePicker',
'columns' => array(
    array(
        'id' => 'autoId',
        'class' => 'CCheckBoxColumn',
        'selectableRows' => '50',
    ),
    //  'id',
    array(
        'name'=>'client',
        'type'=>'raw',
        'value'=>'client($data->client)',
        'htmlOptions' => array(
            'align'=>'center',
            //'width'=>'35%'
        )

这是客户端函数:

       function client($client)   {     

...

return '<div class="stat-block" id="graph">
            <ul>
                <li class="stat-graph inlinebar" id="activitate-lunara">
                '.$data.'
                </li>
                <li class="stat-count">
                    <span>'.$data['0'].'
                    </span>       
                </li> 
                <li class="stat-percent">
                    <span class="text-info stat-percent">'.$target.'</span>
                </li>               
            </ul>
        </div>';
}

编辑 1 : 正如答案 1 中的建议,我使用了 removeClass()addClass() ajax 更新后刷新 css 的函数。什么都没发生, Canvas 标签仍然不会出现。

我尝试使用 replaceWith()并以这种方式插入 Canvas 标签,但它会阻止过滤。

这里是 reinstallDatePicker 函数

<?php Yii::app()->clientScript->registerScript('re-install-date-picker', "
function reinstallDatePicker(id, data) {
   $('#datepicker_min').datepicker({ dateFormat: 'yy-mm-dd',
                                      showOtherMonths: true,
                                      selectOtherMonths: true,
                                      changeYear: true,
                                      changeMonth: true,
                                      });
   $('#datepicker_max').datepicker({ dateFormat: 'yy-mm-dd',
                                      showOtherMonths: true,
                                      selectOtherMonths: true,
                                      changeYear: true,
                                      changeMonth: true,
                                      });
   $( \"#activitate-lunara\" ).removeClass( \"stat-graph inlinebar\" );
   $( \"#graph\" ).removeClass( \"stat-block\" );
   $( \"#graph\" ).addClass( \"stat-block\" );
   $( \"#activitate-lunara\" ).addClass( \"stat-graph inlinebar\" );

}"); ?>

编辑 2:

我没有使用 renderPartial 作为列内容。只是一个返回我想要的内容的函数。在用尽所有可能的想法后,我移动到 renderpartial 并使用 renderpartial + 在 partialview 和 removeclass/addclass 中注册脚本/css 现在一切正常。

最佳答案

我有时也会遇到这个问题。

第一件事:如果您使用的是分部 View ,请在分部 View 中也包含 CSS。

否则,您可能必须在每次 ajax 更新后重新应用样式。

我看到您正在使用 "afterAjaxUpdate"=>"reinstallDatePicker" 因此解决问题的一种方法是将该 CSS 添加到 .stat-block .stat-graph 在那个函数里面。您可以使用像 css() 这样的 jquery 函数, addClass()和许多其他人。

但重要的是在每次 ajax 更新后设置元素的样式。由于您的函数 reinstallDatePicker 在每次 ajax 更新后都会被调用,因此您只需向该函数添加一些代码即可执行您想要的操作(即重新设置元素的样式)。

关于ajax - ajaxupdate 后 gridview 中的 css 不显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24219412/

相关文章:

javascript - 删除照片后刷新页面

html - "width"在 IE 和 Mozilla 中的处理方式不同吗?

html - 按钮值和文本

javascript - 在动态生成的代码上使用 Prettify

php - 更改数据库时出现意外语法错误 - yii

javascript - 使用 AJAX 将图像上传到 ASP.NET Core 应用程序

ajax - 使用 JSF 的 Servlet 过滤器

javascript - 通过动态创建的脚本标签异步加载 JavaScript 的 CORS 问题

php - Yii - CActiveDataProvider 使用关系

php - 如何在 yii 中创建客户端自定义规则