2015-03-31 10:20:42 10051次浏览 4条回答 1 悬赏 10 金钱

各位大神,小弟遇到的情况是这样的:

AppAsset.php文件中已经引入了jquery.js

public $js = [
    'js/jquery-2.1.3.js',
];

但是页面中的YiiActiveForm和页面加载时进行的事件绑定
$(document).ready(function(){......});
都会报错,而且错误都是jQuery未定义,$未定义等基础错误

解决办法是在view的php文件头部再引入一次jquery
$this->registerJsFile("@web/js/jquery-2.1.3.js");

想问一下AppAsset.php引入文件的顺序是在页面文件之后对么?
有没有什么办法能避免在页面内再引用一次jquery呢?
只有10分,各位大神见谅

  • 回答于 2015-03-31 11:19 举报

    思路:把你的js写在最后面即可

    <?php $this->beginBlock('myjs') ?>
    $(document).ready(function(){......});
    <?php $this->endBlock() ?>
    <?php $this->registerJs($this->blocks['myjs'], \yii\web\View::POS_END); ?>
    
    觉得很赞
  • 回答于 2015-03-31 11:25 举报

    文档里有说明,可以设置某个JS脚本在头部加载,具体记不得了,你可能需要去翻一下文档

  • 回答于 2015-04-01 22:02 举报

    我在开始的时候也遇到过这个问题,说说我的吧,跟1楼类似。

    在模板文件里,如果你直接写script就会报错,jquery未定义,但是,在模板文件中$this指向View对象。
    View提供一系列注册资源的方法,也就是assets,
    具体代码:

    <?php $jsString = <<<JS
        $("#login-form").submit(function (){
             alert($(this).data('yiiActiveForm').validated);
        });
    JS;
    $this->registerJs($jsString);?>
    
    

    这样生成的代码就会生成$(document).ready(function(){......});里面,加载在jquery加载之后,$this->registerJs第二个参数就是POS_READY,意为jquery加载完之后。

  • 回答于 2017-03-10 15:23 举报

    数就是POS_READY,意为jquery加载完之后

您需要登录后才可以回答。登录 | 立即注册
tocou2006
试用期

tocou2006

注册时间:2015-03-27
最后登录:2015-04-03
在线时长:4小时2分
  • 粉丝0
  • 金钱0
  • 威望0
  • 积分40

热门问题