【问题标题】:Django javascript not working $ is not definedDjango javascript不工作$未定义
【发布时间】:2018-04-11 03:37:52
【问题描述】:

所以,我一直在做一个 django 项目(使用 djagno 1.11),我看到有人用他们的 git repo here 模拟了一个非常酷的聊天功能(使用 django 2.0)here。我可以按照指南在它自己的应用程序中重新创建整个项目,但是当我将它添加到我自己的应用程序时,我遇到了麻烦。我当前的应用程序使用引导程序并具有 javascript 将项目添加到购物车和其他类似的东西,我想知道这是否妨碍了我。其他的 javascript 仍然有效,新的 javascript 没有。我得到了你的基本错误:

未捕获的引用错误:$ 未定义

当我用谷歌搜索它时,我发现这意味着在定义之前正在使用某些东西。我在 python 方面很不错,但在 javascript 方面是一个极端新手,所以我不确定发生了什么。深入研究错误,我看到以下内容:

    <script src="https://project.s3.amazonaws.com/static/js/chat.js"></script>
<script>
    // For receiving
    sender_id = "";
    receiver_id = "1";

    //For sending
    $(function () {      <<--  This is where the error is pointing to.
        scrolltoend();
        $('#chat-box').on('submit', function (event) {
            event.preventDefault();
            var message = $('#id_message');
            send('', '', message.val());
            message.val('');
        })
    })
</script>

</div>

上面的代码位于 project/chat/templates/chat/chat.html 中的 html 文件的底部,它通过 {% static 'js/chat.js' %} 引用了 chat.js,上面是 aws 代码行cloudhere:project/static_my_proj/js/chat.js。我正在集成的这段代码有“materialize.js”和“materialize.min.js”之类的东西,我试图了解它们的作用。

我想知道我是否正在尝试结合两种类型的 javascript。我完全迷路了。有没有人有任何指示?有什么我可以提供的代码可以提供帮助吗?

谢谢

【问题讨论】:

  • 你必须定义jquery,或者如果你定义了,那是你的js块顺序。浏览器渲染的顺序取决于 html 标记的顺序。
  • 我认为你是对的。我按照艾哈迈德(Ahmet)在下面所说的做了,从技术上讲,错误消失了,但现在我在每个 html 页面上调用 jquery,我可能应该将它放在一个地方。我需要查看 js 块顺序。我认为 js 块排在最后,因为这个 js 在一个 html 代码块中,所以它是乱序的。
  • 我认为您可以执行以下操作:在您的 base.html(母版页)上放置您的 jquery,然后在它的脚本标记后放置 {% block scripts %}{% endblock scripts %} 和孩子页面将 js 函数放入 {% block scripts %} {% endblock scripts %}。 PS://只是简单的解释//

标签: javascript django materialize


【解决方案1】:

您必须添加以下行

<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>

在/之前

<script src="https://project.s3.amazonaws.com/static/js/chat.js"></script>

这一行

【讨论】:

    【解决方案2】:

    我认为你没有正确声明变量。

    变量,

    sender_id = "";
    receiver_id = "1";
    

    应该这样声明,

    var sender_id = "";
    var receiver_id = "1";
    
    // if you are using ES6 then
    
    const sender_id="";
    const receiver_id = "1";
    

    除此之外,也许您应该像 Ahmet Zeybek 所说的那样包含 jquery。

    Materialize.js 和 Materialize.css 是 materialize 框架的一部分,类似于 bootstrap。

    【讨论】:

    • 如果您的问题解决了,请不要忘记接受答案。
    • 所以,java 脚本实际上是在一个 html sn-p 代码中,所以发送者和接收者实际上是正确的。我去了艾哈迈德的建议,它解决了它。
    • 太棒了.. 但是,如果您没有正确声明变量,您的代码是如何工作的??
    猜你喜欢
    • 2019-05-30
    • 2014-06-21
    • 1970-01-01
    • 2017-06-06
    • 2016-08-05
    • 2021-12-30
    • 2017-09-19
    • 1970-01-01
    • 2017-05-10
    相关资源
    最近更新 更多