2014-12-02 144 views
3

我正在构建一个django管理站点,并且正在使用javascript和jquery(2.0.3)向窗体添加一些额外的功能。使用jquery在django文档准备就绪时运行代码

我进口脚本到我的网页是这样的:

<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> 

起初我把下面的代码在project.js结束:

function tryCustomiseForm() { 
    // ... 
} 

$(document).ready(tryCustomiseForm); 

不幸的是这会导致一个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> 

我能修改,以适合我的需要,现在我project.js结尾:

(function($) { 
    $(document).ready(function() { 
     tryCustomiseForm(); 
    }); 
})(django.jQuery); 

虽然这个结果在正确的行为我不明白

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

+1

我认为django框架使用美元'''符号来代替其他东西,而不是jQuery。因此,您需要在您的jQuery函数中创建一个容器,将jQuery分配给仅用于容器内代码的美元符号 – Mivaweb 2014-12-02 07:47:47

回答

2

很难从你发布的代码告诉,但它看起来像$变量在你的模板没有分配给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 
+0

看起来这是正确的,因为以下工作是正确的:django.jQuery(document).ready(tryCustomiseForm) ;'谢谢你的帮助。 – 2014-12-02 07:59:22

+0

@KellyThomas没问题,很高兴帮助 – 2014-12-02 08:00:47

+1

@KellyThomas,我发现[jQuery noconflict docs](http://api.jquery.com/jquery.noconflict/)对解释这个很有帮助。 – rnevius 2014-12-02 08:18:24

-1

尝试

$(document).ready(function(){ 

tryCustomiseForm(); 

}); 

function tryCustomiseForm() { 
    // ... 
} 
+0

这在逻辑上与OP第一次尝试的完全相同,但没有奏效。 – 2014-12-02 07:49:28

+0

这与'tryCustomiseForm()'函数在另一个匿名函数中调用的函数不完全相同。 – 2014-12-02 08:16:43

+0

@SebastianZartner语义。 – 2014-12-03 07:41:51

1

Django文档explain this:jQuery是命名空间,所以你可以使用django.jQuery指IT管理员TEM内镀。

相关问题