Django文档准备就绪时使用jquery运行代码

Kel*_*mas 4 html javascript django jquery events

我正在建立一个django管理网站,并正在使用javascript和jquery(2.0.3)向表单添加一些额外的功能。

我将脚本导入到我的页面中,如下所示:

<html>
    <head>
        <script type="text/javascript" src="/static/admin/js/jquery.js"></script>
        <script type="text/javascript" src="/static/admin/js/jquery.init.js"></script>
        <script type="text/javascript" src="/static/project/js/project.js"></script>
    </head>
    <!-- ... -->
</html>
Run Code Online (Sandbox Code Playgroud)

首先,我将以下代码放置在的末尾project.js

function tryCustomiseForm() {
    // ...
}

$(document).ready(tryCustomiseForm); 
Run Code Online (Sandbox Code Playgroud)

不幸的是,这导致Uncaught TypeError: undefined is not a function最后一行出现异常。

然后,我尝试了其他ready()运气不好的替代语法。

最后,我浏览了change_form.html模板并找到了以下内联javascript:

<script type="text/javascript">
    (function($) {
        $(document).ready(function() {
            $('form#{{ opts.model_name }}_form :input:visible:enabled:first').focus()
        });
    })(django.jQuery);
</script>
Run Code Online (Sandbox Code Playgroud)

我能够对其进行修改以满足自己的需求,现在我的project.js目标是:

(function($) {
    $(document).ready(function() {
        tryCustomiseForm();
    });
})(django.jQuery);
Run Code Online (Sandbox Code Playgroud)

尽管这样会导致正确的行为,但我并不理解

这引出我的问题:为什么我的第一种方法失败了?第二种方法在做什么?

Ror*_*san 5

从您发布的代码中很难看出来,但是看起来$变量没有在模板中分配给jQuery。因此$()构造抛出了undefined function错误。

后者起作用的原因是因为它在您的DOMReady处理程序周围放置了一个闭包,该闭包传入django.jQuery,我认为这是noConflict模板中jQuery分配的变量,并将其分配给$范围内的:

(function($) { // < start of closure
    // within this block, $ = django.jQuery
    $(document).ready(function() {
        tryCustomiseForm();
    });
})(django.jQuery); // passes django.jQuery as parameter to closure block
Run Code Online (Sandbox Code Playgroud)