ReferenceError: $ 未定义 yii2

2024-01-01

在我的视图中添加 JavaScript 会导致ReferenceError: $ is not defined。我认为问题是由于 Yii2 最后在我的页面上注入脚本造成的。如何解决这个问题?

或者如何阻止 Yii2 自动加载脚本文件?

My view

  <?php

   use yii\helpers\Html;
   use yii\helpers\ArrayHelper;
   use yii\helpers\UrlManager;
   use yii\widgets\ActiveForm;
   use backend\controllers\StandardController;

   use backend\models\standard;


   ?>

 <div class="domain-form">

<?php $form = ActiveForm::begin(); ?>

<?php



    <?= $form->field($model, 'clause')->textarea(['rows' => 6]) ?>

    <?= $form->field($model, 'name')->textarea(['rows' => 6]) ?>

    <div class="form-group">
        <?= Html::submitButton($model->isNewRecord ? 'Create' : 'Update', ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?>
    </div>

<?php ActiveForm::end(); ?>

   </div>

    <script type="text/javascript">
    $("document").ready( function () {
    alert("hi");
    });</script>

我需要获取这个简单的脚本来在页面加载后显示警报。我没有在这里调用任何脚本文件,因为 yii 通过调用在布局中自动加载(我认为)

  AppAsset::register($this);

这会导致脚本文件在页面末尾(在我的自定义脚本之后)注册。

怎么解决这个问题呢?


Yii2 最后在页面上注入脚本(jquery 等)。这是有意且期望的。但这意味着 jQuery 将在您的脚本之后加载,因此当您的脚本运行时,jQuery 还不存在。

快速测试最简单的方法是将 yii-scripts(jquery 等)移动到页面的头部。调整assets\AppAsset.php并添加以下内容:

public $jsOptions = array(
    'position' => \yii\web\View::POS_HEAD
);

Done!


但在生产中,您通常希望脚本最后加载,而是让 Yii2 处理您的 javascript:

$this->registerJs(
    '$("document").ready(function(){ alert("hi"); });'
);

现在 Yii 将处理这个 js 并将其放置在任何重要的内容之后(例如 jQuery)。

然而,您很快就会注意到 IDE 通常不擅长处理这种语言嵌套(PHP 中的 JavaScript),因此语法突出显示可能会被破坏。解决此问题的一种方法是将脚本注册在单独的文件中:

$this->registerJsFile( 'myScript.js' );

如果您想要更多地控制加载脚本的顺序,您可以添加依赖项作为第二个参数,并将其他选项添加为第三个参数:

$this->registerJsFile( 
    'myScript.js', 
    ['\backend\assets\AppAsset'],  
    ['position' => '\yii\web\View::POS_END']
);

如果您出于某种原因绝对希望脚本内联呈现,您可以这样做:

$this->registerJs( $this->renderPartial('myScript.js') );

添加脚本的推荐方法是使用资源包 https://github.com/yiisoft/yii2/blob/master/docs/guide/assets.md。 在看assets/AppAssets.php并将您的 js 文件添加到 $js 数组中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ReferenceError: $ 未定义 yii2 的相关文章

随机推荐

  • ddply 按 R 中的组求和

    我有一个示例数据框 数据 如下所示 X Y Month Year income 2281205 228120 3 2011 1000 2281212 228121 9 2010 1100 2281213 228121 12 2010 900
  • std::setw 和 unicode 字符

    我的问题如以下最小示例所示 include
  • 如何向此 CSS“切换器”“切换开关”添加文本

    这是实际的 Switcher 生成器 https proto io freebies onoff https proto io freebies onoff 我不清楚如何向事件添加文本 因此 当开关处于默认状态时 会显示某些文本 反之亦然
  • Mathematica 绘图中多个函数的检测和样式设置

    This https stackoverflow com questions 5597566 这个问题让我开始思考 Mathematica 如何检测正在绘制的多个函数 我发现我实在是看不懂这个流程 考虑 Plot 1 Sequence 2
  • 如何为二维数组的 qsort 编写比较器函数?

    我有一个 n 2 大小的数组 我想根据第二列的值使用 qsort 对它们进行排序 include
  • IEquatable,如何正确实施[重复]

    这个问题在这里已经有答案了 我正在使用 net 2 0 和 c 并且我已经在我的类中实现了 IEquatible 接口 如下所示 public MyClass IEquatable
  • 如何计算 char 数组中的元素数量?

    我试图计算数组中的元素数量 并被告知该行 int r sizeof array sizeof array 0 会给我数组中元素的数量 我发现该方法确实有效 至少对于 int 数组而言 然而 当我尝试这段代码时 事情就崩溃了 include
  • 为 Galaxy S8 创建模拟器? - 安卓工作室

    我创建了一个新的硬件配置文件 试图为 Galaxy S8 S8 制作模拟器 我将屏幕尺寸设置为 5 8 6 2 英寸 取决于 S8 还是 S8 尽管事实上这似乎不会影响模拟器 屏幕分辨率设置为 1440 x 2960 就像设备一样 模拟器看
  • 如何将文件分成相等的部分而不破坏单独的行? [复制]

    这个问题在这里已经有答案了 我想知道是否可以将文件分成相等的部分 edit 除了最后一个之外都相等 而不破坏线 在 Unix 中使用 split 命令 行可能会分成两半 有没有一种方法可以将一个文件分成 5 个相等的部分 但仍然只包含整行
  • DirectoryInfo.EnumerateFiles(...) 导致 UnauthorizedAccessException (和其他异常)

    我最近需要枚举整个文件系统 寻找特定类型的文件以进行审计 由于对要扫描的文件系统的权限有限 这导致我遇到了一些异常 其中 最为普遍的是未经授权的访问异常 http msdn microsoft com en us library syste
  • 在 Visual Studio Code 中添加模块的 Python 路径

    我很难指定包含另一个目录甚至同一项目的文件夹中的模块 包的 python 路径 当我尝试导入时出现错误 ModuleNotFoundError 没有名为 感知 的模块 在 Spyder 中 这只需使用 UI 选择 python 将查找的附加
  • 这是一个通用函数指针吗?它危险吗?

    在学习和搞乱函数指针时 我注意到一种初始化 void 函数指针并强制转换它们的方法 然而 虽然我没有收到任何警告或错误 无论是使用 GCC 还是 VS 的编译器 我想知道这样做是否危险或不好的做法 因为我经常在网上看到这种初始化函数指针的方
  • 生成颜色渐变

    我有一个想法以编程方式生成匹配的配色方案 但是我需要能够在给定一组两种颜色 十六进制或 RGB 值 的情况下生成线性渐变 任何人都可以向我提供 伪 代码或为我指明完成此任务的正确方向吗 EDIT 我忘了提及 但我还需要指定 或知道 从颜色
  • 推荐一个 HTML5/Javascript 的开发环境吗? [复制]

    这个问题在这里已经有答案了 可能的重复 用于 JavaScript 开发的 IDE https stackoverflow com questions 788978 ide for javascript development 我想自学 H
  • 如何创建类的实例并从 Bag 对象(如会话)设置属性

    该类将在runtime and values存储在一个Bag类似物体session or ViewBag 现在我想创建一个instance类并设置其属性使用袋子数据 我知道我应该使用reflection 但不知道有没有什么方法开箱即用做这样
  • JQueryUI 滑块在 IE 上不起作用

    我一直在尝试让滑块在控件旁边显示其当前值 本教程http www ryancoughlin com demos interactive slider http www ryancoughlin com demos interactive s
  • 将委托方法放入类别中

    到目前为止我开发了一些应用程序 现在我正在编写一个新的项目 在这个项目中我希望保持代码非常干净 因此很容易找到方法 我想从UI视图控制器 whose view have a UI表格视图作为子视图 我希望有一个名为DetailViewCon
  • 在按钮单击事件中旋转文本

    我需要在单击按钮时以不同角度旋转文本 我需要两个按钮 一个用于顺时针移动文本 另一个用于逆时针移动文本 尝试这个 html
  • Eclipse Subversive 提交变更列表?

    我刚刚创建了一个忽略提交更改列表 如中所述SVN 有没有办法将文件标记为 不提交 https stackoverflow com questions 635446 svn is there a way to mark a file as d
  • ReferenceError: $ 未定义 yii2

    在我的视图中添加 JavaScript 会导致ReferenceError is not defined 我认为问题是由于 Yii2 最后在我的页面上注入脚本造成的 如何解决这个问题 或者如何阻止 Yii2 自动加载脚本文件 My view