功夫熊猫 2012-03-21 02:11:29 4377次浏览 9条回复 0 0 0

有人遇到过? 在CListView view, itemview里 有一些,inline style,js 。 在显示第一页时,都好使。 但翻页后,所有的javascript, css 都不好使了。

求解 谢谢。

就用yii建立一个app后,都自动生成一个user,的table,view files, 和controller. 我就改了一下那个itemview file: 加了style,和一个js。

<style type="text/css">
    .user_view li {
        float: left;
        position: absolute;
    }
</style>
<script type="text/javascript">
    $(document).ready(function() {
        $("#user_view_li_id_<?php echo $data->id;?>").css('left', 100);
        $("#user_view_li_name_<?php echo $data->username;?>").css('left', 400);
        $("#user_view_li_pass_<?php echo $data->password;?>").css('left', 800);
        $("#user_view_li_email_<?php echo $data->email;?>").css('left', 1200);
    });
</script>

<div class="view">
    <ul class="user_view">
        <li id="user_view_li_id_<?php echo $data->id; ?>">
            <b><?php echo CHtml::encode($data->getAttributeLabel('id')); ?>:</b>
            <?php echo CHtml::link(CHtml::encode($data->id), array('view', 'id'=>$data->id)); ?>
            <br />
        </li>

        <li id="user_view_li_name_<?php echo $data->username;?>">
            <b><?php echo CHtml::encode($data->getAttributeLabel('username')); ?>:</b>
            <?php echo CHtml::encode($data->username); ?>
            <br />
        </li>

        <li id="user_view_li_pass_<?php echo $data->password;?>">
            <b><?php echo CHtml::encode($data->getAttributeLabel('password')); ?>:</b>
            <?php echo CHtml::encode($data->password); ?>
            <br />
        </li>

        <li id="user_view_li_email_<?php echo $data->email;?>">
            <b><?php echo CHtml::encode($data->getAttributeLabel('email')); ?>:</b>
            <?php echo CHtml::encode($data->email); ?>
            <br />
        </li>
        <div class="clear"></div>
    </ul>
</div>

第一页结果:正确。 [attach]680[/attach]

第二页,应该是js没有被运行,所以style不正确。 [attach]679[/attach]

  • 回复于 2012-03-21 09:47 举报

    没发现。下次要贴个图 出来 ,才好看到问题。

  • 回复于 2012-03-21 11:00 举报

    用CClientScript注册才能保证兼容yii内置的一些js

  • 回复于 2012-03-21 19:22 举报

    谢谢回复哈,
    那个itemview,我只是加了几个id,和style。
    还加了一个doc.ready function.
    就当第一页显示是正确的。但是第二页,js好像没有被运行。所以style也就没有被apply。

  • 回复于 2012-03-21 20:56 举报

    我调试了一下,doc.ready 确实没有被运行,当选择第2页。
    doc.ready都在什么时候被调用?

    问题总结一下:
    在ClistView 的itemview 里面。
    如果有 $(document).ready() .那么这个function 只在显示第一页的时候被调用。
    在显示其它页,不会被调用。

    不知道,我是不是犯了基本的错误,对 $(document).ready() 用法不对。

  • 回复于 2012-03-22 13:30 举报

    问题就在这个$(document).ready()上面,因为yii也会用到jquery,每次翻页就会把你写的document ready代码覆盖,如之前提到的,需要把你的代码用cclientscript注册:
    比如:

    Yii::app()->clientScript->registerScript('search', "
    $('.search-button').click(function(){
    	$('.search-form').toggle();
    	return false;
    });
    $('.search-form form').submit(function(){
    	$.fn.yiiGridView.update('test-grid', {
    		data: $(this).serialize()
    	});
    	return false;
    });
    ");
    
  • 回复于 2012-03-22 17:39 举报

    谢谢,谢谢回复。
    你之前说的,我根本不懂啊。
    现在才明白一点点。这就去找找registerScript,和怎么注册带参数的。
    非常感谢。

  • 回复于 2012-03-22 18:33 举报

    晕了,没注册明白。

    原代码:

    <script type="text/javascript">
        $(document).ready(function(){
            <?php foreach($data->details as $detail) :;?>
                $("#program_<?php echo $detail->id;?>").css('left', <?php echo $detail->id*400;?>;
            <?php endforeach;?>
        });
    </script>
    

    我写的错误的注册代码:

    $cs = Yii::app()->getClientScript();
    $js = " <?php foreach ($data->details as $detail):;?>
    $('#program_$detail->id').css('left', (int)$detail->id*400);
    <?php endforeach;?> ";
    $cs->registerScript('program', $js, CClientScript::POS_READY);
    

    想要这么注册,可是总提示detail 没定义。
    汗,现学现用的javascript,懂得很有限。(老板顾我,真亏啊。)
    求助。

  • 回复于 2012-05-21 14:14 举报

    从6L中学到东西了。收藏了,以后肯定会用到。

  • 回复于 2015-09-17 17:55 举报

    我也遇到了你说的问题,请问怎么解决的啊?

您需要登录后才可以回复。登录 | 立即注册