Django和jQuery困难(为什么在管理应用程序中$未定义?)

发布于 2021-01-29 15:22:51

自从我使用jQuery已经有一段时间了。我想我犯了一个愚蠢的错误。

这是Django小部件:

class FooWidget(Widget):

    # ...

    class Media:
        js = ('js/foowidget.js',)

这是.js文件:

alert("bar");

$(document).ready(function() {
  alert("omfg");
  $('.foo-widget').click(function() {
    alert("hi");
    return false;
  });
});

alert("foo");

唯一alert()触发的是第一个。我有一个愚蠢的语法错误或什么?

此外,如果页面上其他一些包含的脚本重新定义了$(document).ready,我是否需要担心呢?我猜测后续的定义会覆盖我的,所以让后续的定义更安全:

$(document).ready(function() {
    document.ready()
    // real stuff
});

jQuery已经包含在页面中了foowidget.js

更新 :根据@lazerscience的链接,我尝试了以下操作,但是它仍然像以前一样失败:

alert("bar");

$(function() {
  alert("omfg");
  $(".set-widget").click(function() {
    alert("hi");
    return false;
  });
});

alert("foo");

更新2 :奇怪的是,当我这样做时:

alert($);

我得到“未定义”。这表明jQuery实际上并未初始化。这使我感到困惑,因为其中<head>包括:

<script type="text/javascript" src="/media/js/jquery.min.js"></script>
<script type="text/javascript" src="/media/js/jquery.init.js"></script>
<script type="text/javascript" src="/media/js/actions.min.js"></script>
<script type="text/javascript" src="/static/js/foowidget.js"></script>

不会将我的脚本放在jQuery脚本之后以确保$将其定义吗?

更新3 :来自jquery.min.js:

/*!
 * jQuery JavaScript Library v1.4.2
 * http://jquery.com/
 *
 * Copyright 2010, John Resig
 * Dual licensed under the MIT or GPL Version 2 licenses.
 * http://jquery.org/license
 *
 * Includes Sizzle.js
 * http://sizzlejs.com/
 * Copyright 2010, The Dojo Foundation
 * Released under the MIT, BSD, and GPL Licenses.
 *
 * Date: Sat Feb 13 22:33:48 2010 -0500
 */
(function(A,w){function ma(){if(!c.isReady){try{s.documentElement.doScroll("left")}catch(a){setTimeout(ma,1);return}c.ready()}}function Qa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function X(a,b,d,f,e,j){var i=a.length;if(typeof b==="object"){for(var o in b)X(a,o,b[o],f,e,d);return a}if(d!==w){f=!j&&f&&c.isFunction(d);for(o=0;o<i;o++)e(a[o],b,f?d.call(a[o],o,e(a[o],b)):d,j);return a}return i? /* ... */

对我来说看起来正确。

这来自Firebug控制台:

Error: $ is not a function
[Break On This Error] $(function() {
foowidget.js (line 5)
>>> $
anonymous()
>>> jQuery
undefined
>>> $('a')
null
>>> $(document)
null

更新4$在我的Django站点的除管理应用程序之外的所有页面上定义。奇…

更新5 :这很有趣。

jQuery.init.js

// Puts the included jQuery into our own namespace
var django = {
 "jQuery": jQuery.noConflict(true)
};

从控制台:

>>> $
anonymous()
>>> django
Object {}
>>> django.jQuery
function()
>>> django.jQuery('a')
[a /admin/p..._change/, a /admin/logout/, a ../../, a ../, a.addlink add/]
关注者
0
被浏览
45
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    您可以$(document).ready()
    在一页上随意使用。它并没有像您所说的那样 重新定义
    任何内容,但是调用了ready()添加功能,这些功能在“文档准备就绪”时被调用。调试您的代码,例如。使用Firebug,它将向您显示有关错误发生位置的更多详细信息!



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看