我目前有一个HTML文件,其中有一个脚本声明如下:
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
code.......
var a = "hello"
});
</script>
我正在尝试在HTML文件中添加另一个脚本,该脚本将调用此变量“a”。现在,我正在做这样的事情:
<script type="text/javascript">
alert(a);
</script>
但它并没有提醒任何事情。如果我用“hello”之类的字符串替换a,我会收到警报。我把变量称为错误吗?我试过寻找解决方案但是他们都说你应该能够轻松地从另一个脚本中调用变量,假设之前声明并初始化了脚本。感谢。
答案 0 :(得分:2)
将a
声明移到函数外部。
如,
var a;
$(document).ready(function() {
code.......
a = "hello"
});
然后是......
alert(a);
请记住,变量是功能范围的,因此如果您在函数内部定义它,它将无法在函数外部显示。
根据评论进行更新:
因为您在尝试与a
变量进行交互时遇到了时间问题,我建议引入事件总线(或其他一些机制)来协调时序。鉴于您已经在使用jQuery,您可以按如下方式创建一个简单的总线:
var bus = $({});
bus.on('some-event', function() {});
bus.trigger('some-event', ...);
这实际上也适用于一些更好的代码组织,因为现在你真的只需要总线是全局的,并且你可以在事件中传递数据,而不是一堆其他随机变量。
如,
var bus = $({});
$(document).ready(function() {
var a = 'hello';
bus.trigger('some-event', { a: a });
});
然后在你的另一个文件中:
bus.on('some-event', function(e, data) {
alert(data.a);
});
JSBin example(显然不会分布在多个文件中,但适用相同的原则)。
答案 1 :(得分:0)
将您的代码替换为
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
<script type="text/javascript">
var a="";
$(document).ready(function() {
a = "hello";
});
</script>
现在您可以访问变量a
,如下所示。
<script type="text/javascript">
alert(a);
</script>
您的代码存在的问题是,您在a
内声明变量$(document).ready()
,使其成为ready()
的本地变量。
答案 2 :(得分:0)
当你编写一个内部功能块时,你将它作为一个局部变量,你可以将变量声明移到功能块之外,如其他答案所说或者你可以使用:
$(document).ready(function() {
window.a = "hello";
});
以后:
alert(a);
在这两种情况下,您都将a声明为全局变量,不推荐使用。