Yii2:如何手动调用yiiActiveForm()?

时间:2018-03-17 07:28:38

标签: javascript jquery yii2 yii2-validation

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>

1 个答案:

答案 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读得很好。