当我处于开发模式时,一切正常,我有以下.js导入顺序:
<!-- Scripts -->
<script src="/assets/jquery/jquery.min.js?body=1"></script>
<script src="/assets/jquery-ujs/src/rails.js?body=1"></script>
<script src="/assets/1modernizr.custom.js?body=1"></script>
<script src="/assets/2rainyday.0.1.2.min.js?body=1"></script>
<script src="/assets/3xrain_init_youtube.js?body=1"></script>
<script src="/assets/3xxbootstrap.min.js?body=1"></script>
<script src="/assets/4classie.js?body=1"></script>
<script src="/assets/5modalEffects.js?body=1"></script>
<script src="/assets/6jquery.placeholder.js?body=1"></script>
<script src="/assets/7jquery.custom.js?body=1"></script>
<script src="/assets/8script.js?body=1"></script>
<script src="/assets/application.js?body=1"></script>
<script>
$(document).ready(function(){
$("#countdown").countdown({
date: "3 march 2014 12:00:00",
format: "on"
},
function() {
// callback function
});
});
</script>
在制作中,它如下所示:
<!-- Scripts -->
<script src="/assets/application-afbc85ff07d9057a50dee5713b8bccdf.js"></script>
<script>
$(document).ready(function(){
$("#countdown").countdown({
date: "3 march 2014 12:00:00",
format: "on"
},
function() {
// callback function
});
});
</script>
问题是我在生产模式中遇到了一些我无法理解的错误。第一个错误是:
Uncaught TypeError: Object [object Object] has no method 'countdown'
对countdown的调用是在导入application.js之后,为什么会这样?是否有可能在application.js之前执行内联脚本?如果是这样,为什么在分离文件的开发中不会发生这种情况?
第二个错误是:
Uncaught TypeError: Cannot call method 'addEventListener' of null
更新
如果我放了一个setInterval我解决了第一个错误,就像这样:
<script>
$(document).ready(function(){
setInterval(1000, function(){
$("#countdown").countdown({
date: "3 march 2014 12:00:00",
format: "on"
},
function() {
// callback function
}
);
});
});
</script>
所以我认为内联脚本首先被执行。这很奇怪。
答案 0 :(得分:4)
由于之前的错误,您看到了错误:Uncaught TypeError: Cannot call method 'addEventListener' of null
这在生产中发生,因为所有JS都在一个文件中,如果有错误,则其余部分不会执行。它在开发中有效,因为5modalEffects.js
是一个单独的文件,因此该文件中的错误不会影响任何其他文件。
我设法通过将.md-close
类添加到div#modal-1
内的关闭模式按钮来修复模态错误,这解决了另一个问题:)