在yii2
我使用yii2-assets-auto-compress
插件将所有js代码放在1个文件中,包括jQuery lib。加载此文件为async
以加快页面加载速度。但是,如果页面上有表单,则yii会在yiiActiveForm()
的末尾添加</body>
。因此,错误为jQuery is not defined
。
如何解决这个问题?首先,我可以从script.js手动调用yiiActiveForm()
,但如何在身体末端自动加载它?通常,这不方便,因为可能有其他脚本附加js代码。也许有人知道如何用这个yii2-assets-auto-compress
插件附加js代码?
<script src="/assets/js-compress/script.js?" async="async"></script>
<script type="text/javascript">
jQuery(document).ready(function () {
jQuery('#w0').yiiActiveForm([],[]);
});
</script>
</body>
答案 0 :(得分:0)
async
在HTML解析期间下载文件,并在完成下载后暂停HTML解析器执行它。
Jquery
。或者使用脚本标记在文档的<head>
内加载脚本意味着使用脚本标记
<script type="text/javascript" src="/path/to/compressed.js" async="async"></script>
或使用
<?php $this->registerJsFile('/path/to/compressed.js',['aync'=>'aync'])?>
如果您使用AssetManager加载脚本文件
然后像这样加载
public $js = [
['js/compressed.js','async'=>'async','position' => yii\web\View::POS_HEAD],
];
此外,您应该将资产管理器配置为不加载核心脚本jquery,以便它不会加载jquery两次。
'assetManager' => [
'bundles' => [
'yii\web\JqueryAsset' => [
'sourcePath' => null,
'js'=>[]
],
],
],
HERE
读得很好。