Javascript 共享多个JS变量<;脚本>;阻碍
我正在开发CodeIgniter应用程序 我有一个视图,我们称之为日历,其中有一个JS/jQueryJavascript 共享多个JS变量<;脚本>;阻碍,javascript,ajax,codeigniter,variables,Javascript,Ajax,Codeigniter,Variables,我正在开发CodeIgniter应用程序 我有一个视图,我们称之为日历,其中有一个JS/jQuery块。看起来像这样: $(document).ready(function() { $("#day_list").fadeIn(600); // init var current_month = <?= $init['current_month']; ?>; var current_year = <?
块。看起来像这样:
$(document).ready(function() {
$("#day_list").fadeIn(600);
// init
var current_month = <?= $init['current_month']; ?>;
var current_year = <?= $init['current_year'] ?>;
// previous, next month ajax call
$(".previous, .next").click(function(event) {
// do stuff to these variables, then ajax call.
$.ajax({
// ajax
});
});
});
var foo = foo || {} //Use existing foo or create an empty object.
foo.bar = foo.bar || {}
foo.bar.baz = foo.bar.baz || {}
$(文档).ready(函数(){
美元(“#日名单”)。法登(600);
//初始化
var当前_月=;
var本年=;
//上个月、下个月的ajax调用
$(“.previous,.next”)。单击(函数(事件){
//对这些变量执行一些操作,然后调用ajax。
$.ajax({
//阿贾克斯
});
});
});
在另一个视图“我的页脚”中,我有另一个脚本块,它应该使用相同的变量(当前月份和当前年份)。然而,它不知道它们的存在。将这些变量从第一个
块传递到另一个块的最快、最简单的方法是什么?由于我的应用程序的构建方式,我无法将这两个模块放在一起。我应该为它编写一个函数来获取并返回这些值(我应该怎么做?我是个新手)还是有更简单的方法
非常感谢 将变量声明为全局变量。只需将它们移到文档就绪功能之外
var current_month = <?= $init['current_month']; ?>;
var current_year = <?= $init['current_year'] ?>;
$(document).ready(function() {
....
});
var当前月=;
var本年=;
$(文档).ready(函数(){
....
});
current\u month
和current\u year
现在可以从任何脚本块访问。如果在任何功能块之外声明变量,它们将是全局变量,可用于页面上的任何脚本
var current_month;
var current_year;
$(document).ready(function () {
// init
current_month = <?= $init['current_month']; ?>;
current_year = <?= $init['current_year'] ?>;
...etc...
});
var当前月;
本年的var;
$(文档).ready(函数(){
//初始化
当前_月=;
本年度=;
等
});
由于您在函数中声明了这些变量,因此它们具有局部作用域。将其移到外部以使其全球化:
// init
var current_month = <?= $init['current_month']; ?>;
var current_year = <?= $init['current_year'] ?>;
$(document).ready(function() {
$("#day_list").fadeIn(600);
// previous, next month ajax call
$(".previous, .next").click(function(event) {
// do stuff to these variables, then ajax call.
$.ajax({
// ajax
});
});
});
//初始化
var当前_月=;
var本年=;
$(文档).ready(函数(){
美元(“#日名单”)。法登(600);
//上个月、下个月的ajax调用
$(“.previous,.next”)。单击(函数(事件){
//对这些变量执行一些操作,然后调用ajax。
$.ajax({
//阿贾克斯
});
});
});
比使用全局变量更好的解决方案是在HTML中按语义存储它们,然后通过jQuery检索它们:
<body data-month="<?= $init['current_month']; ?>" data-year="<?= $init['current_year'] ?>">
$(document).ready(function() {
$("#day_list").fadeIn(600);
var current_month = $("body").data("month");
var current_year = $("body").data("year");
// previous, next month ajax call
$(".previous, .next").click(function(event) {
// do stuff to these variables, then ajax call.
$.ajax({
// ajax
});
});
});
该“var”声明初始化就绪功能范围内的两个变量(当前月
,当前年
),因此它们在其他地方不可用。您可以全局声明它们:
var current_month;
var current_year;
$(document).ready(function() {
...
current_month = ...
}
这样,您就可以在底部脚本中使用它们。学习用JavaScript命名变量的名称空间非常重要。范围很重要,而且非常重要。现在,因为您正在使用“var”关键字,所以您的内容将在本地范围内
这里的一些其他答案说,您应该将它们转移到全球范围。这是可行的,除非有其他东西无意中覆盖了它们。我非常不同意这种方法,全局范围的变量在JavaScript中是不好的做法
名称空间的工作原理如下:
$(document).ready(function() {
$("#day_list").fadeIn(600);
// init
var current_month = <?= $init['current_month']; ?>;
var current_year = <?= $init['current_year'] ?>;
// previous, next month ajax call
$(".previous, .next").click(function(event) {
// do stuff to these variables, then ajax call.
$.ajax({
// ajax
});
});
});
var foo = foo || {} //Use existing foo or create an empty object.
foo.bar = foo.bar || {}
foo.bar.baz = foo.bar.baz || {}
等等等等
这似乎需要做更多的工作,但它也可以保护您的变量
您还可以添加一个简单的名称空间函数,该函数可以根据窗口对象安全地命名所有内容。(我从很久以前的某个地方抄袭了这个,我想我对它做了一些修改,但可能没有)
把它放在你的应用程序的顶部,你可以用$.namespace(“myapp.mydata”)命名名称空间,然后说myapp.mydata.currentYear=
$.namespace = function() {
var a=arguments, o=null, i, j, d;
for (i=0; i<a.length; i=i+1) {
d=a[i].split(".");
o=window;
for (j=0; j<d.length; j=j+1) {
o[d[j]]=o[d[j]] || {};
o=o[d[j]];
}
}
return o;
};
$.namespace=function(){
变量a=参数,o=null,i,j,d;
对于(i=0;iThanks。一旦我了解了这个概念,我一定会尝试一下。谢谢你推荐这本书。我一直想买一本书,但是书太多了,哈哈。谢谢!没问题。很多人认为好的部分是关于JavaScript语言的权威书。一个主要是网页设计师的前端开发人员,这样做总是很有诱惑力的,将JS变量存放在HTML中供以后检索,但这真的是一个好的、可维护的解决方案吗?啊……非常感谢。还必须将它移到(函数($){})(jQuery);包装器之外。