【发布时间】:2015-10-14 11:04:24
【问题描述】:
我刚刚将一个 Rails 应用程序部署到 Heroku,发现只有一个 javascript 函数。函数officerCheck() 存在于它自己的文件officerCheck.js 中。并由初始化文件init.js 调用,行为officerCheck。
函数如下;日志的第一个输出甚至不显示
function officerCheck(){
console.log("officer check in");
var change=0;
$('#toggle-two-wrapper').on('change', function(){
if(change===0){
checking();
}else{
change=0;
}
});
function checking(){
var alert=0;
var existingRoles=[];
neededRoles=["President", "Secretary", "Treasurer"];
$("select.officer_role").each(function(i,e){
existingRoles[i]=$(e).val();
console.log("existing Roles "+existingRoles[i]);
});
$(neededRoles).each(function(i,e){
if($.inArray(e,existingRoles)==-1){
alert=1;
$('div#final-submission').prepend("<span class='warning' style='display:block'>"+e+" needed.</span>");
$("span.warning").delay(9000).slideUp("medium");
}
});
console.log("alert equals "+alert);
if(alert==1){
console.log("we're in");
change=1;
$('div.incorporation_submit #toggle-two').bootstrapToggle('off');
}
}
}
以下是我目前调查过的列表:
- 所有其他 javascript 函数都可以正常工作(包括那些由 init.js 调用的函数)
-
officerCheck函数确实可以在我的 localhost 上运行,并且 heroku 在该机器上是最新的。 - 当我浏览heroku 托管的站点时,浏览器确实加载了函数
officerCheck及其各自的调用。 (我可以在 firebug 的脚本选项卡中看到两者)。 - 如果我将函数的内容剪切并粘贴到 firebug 中,它们仍然有效。 (让我相信 heroku 只是不喜欢我调用函数的方式)
- 使用
officerCheck();从 firebug 调用函数不起作用。 - 但是,将整个函数加载到 firebug 并使用
officerCheck();调用它确实有效。
我猜我在扯一些 Heroku 无法忍受的草率。欢迎任何想法想法或警告。
【问题讨论】:
-
change在哪里声明?也许尝试另一个变量名并为初学者添加var声明。 -
如果您在控制台
officerCheck中运行不带括号,那么您应该得到一个输出:function。如果你不这样做,这意味着你的功能没有找到,你应该检查你的资产。此外,如果您在开发模式和 Heroku 生产模式下在 localhost 上运行,请确保在创建函数后编译您的资产。 -
@RubyRacer 好的专业提示。运行不带括号的
officerCheck的输出是officerCheck()这算吗?我确实一直在开发模式下运行,所以我将检查该操作顺序。感谢您的帮助。 -
@WhiteHat 不错。我忘记了我的变量。它没有解决它,但仍然感谢QC。
-
在新加载的页面上像您一样获取现有函数输出,意味着该函数确实已声明并加载。您确实有一些未声明变量的问题,也在
checking()中,但这应该是浏览器的事情,无论您的应用程序托管在哪里,它都应该工作......您的浏览器是否提供任何反馈以说明原因函数没有运行?
标签: javascript jquery ruby-on-rails heroku asset-pipeline