function SlideShow(area) {
var SlideImg = new Array('img1', 'img2');
var SlideArea = document.getElementById(area);
for (i = 0; i < SlideImg.length; i++) {
if (SlideImg[i] == SlideImg[0]) {
var classname = 'active';
} else {
var classname = 'not-active';
}
var html = '<img src="images/room/' + SlideImg[i] + '.jpg" id="' + SlideImg[i] + '" class="' + classname + '" />';
SlideArea.innerHTML += html;
}
var a = 1;
function RunSlide() {
var before = a - 1;
if (a > SlideImg.length - 1) {
a = 0;
}
ImgBefore = document.getElementById(SlideImg[before]);
ImgBefore.className = 'not-active';
ImgNext = document.getElementById(SlideImg[a]);
ImgNext.className = 'active';
a++;
}
var run = setInterval(RunSlide, 5000);
}
如何更改a
值?因为a
变量不在全局范围内,我可以从其他函数访问它吗?
我想访问它,但不想将a
变量声明为全局变量。
答案 0 :(得分:2)
是的,该变量是函数的本地变量,因此您必须在外部公开一个函数才能访问它。
例如,您可以将此函数放在函数中,使其返回一个可以设置变量的函数:
function SlideShow(area) {
...
return function(value){ a = value; };
}
用法:
var setA = SlideShow(something);
然后您可以使用该功能:
setA(42);
答案 1 :(得分:1)
简单,在var a;
之外声明SlideShow
,然后全局可访问。
请记住,它仍然需要使用a = 1;
答案 2 :(得分:1)
如果你可以使变量的范围成为全局变量,那么你应该能够。而不是在函数中声明,只需引用变量并在“&lt; head&gt;”中声明而是你的页面。看看我的例子,我测试了一下,然后点击差异链接改变变量的值并显示在页面上。
<html>
<head><title>Test</title>
<script language="javascript">
var a = -1;
function changeVar(value) {
a = value;
document.getElementById("test1").innerHTML = a;
}
</script>
</head>
<body>
<h1>Test page</h1>
<a href="#" onclick="changeVar(2);">Click me (2)</a> <br />
<a href="#" onclick="changeVar(5);">Click me (5)</a> <br />
<a href="#" onclick="changeVar(9);">Click me (9)</a> <br />
<hr>
<h1>Value for a is: <div id="test1"></div></h1>
<!-- really test by including function later on page -->
<script language="javascript">
function SlideShow(area) {
var SlideImg = new Array('img1', 'img2');
var SlideArea = document.getElementById(area);
for (i = 0; i < SlideImg.length; i++) {
if (SlideImg[i] == SlideImg[0]) {
var classname = 'active';
} else {
var classname = 'not-active';
}
var html = '<img src="images/room/' + SlideImg[i] + '.jpg" id="' + SlideImg[i] + '" class="' + classname + '" />';
SlideArea.innerHTML += html;
}
a = 1; // removed declaration of a and just using a from prior declaration
function RunSlide() {
var before = a - 1;
if (a > SlideImg.length - 1) {
a = 0;
}
ImgBefore = document.getElementById(SlideImg[before]);
ImgBefore.className = 'not-active';
ImgNext = document.getElementById(SlideImg[a]);
ImgNext.className = 'active';
a++;
}
var run = setInterval(RunSlide, 5000);
}
</script>
</html>
如果在函数中声明,则无法访问变量本身,因为它的范围是LOCAL。请参阅:http://www.w3schools.com/js/js_variables.asp
但是,有一种方法可以调整函数来设置页面上另一个元素的值,然后其他人可以引用该值。对脚本使用相同的代码段,当更新a时,您可以在页面上设置隐藏字段的值,然后其他人可以引用该值。任何其他方式我认为你必须在函数之外声明它。
替代1:
<!-- really test by including function later on page -->
<script language="javascript">
function SlideShow(area) {
var SlideImg = new Array('img1', 'img2');
var SlideArea = document.getElementById(area);
for (i = 0; i < SlideImg.length; i++) {
if (SlideImg[i] == SlideImg[0]) {
var classname = 'active';
} else {
var classname = 'not-active';
}
var html = '<img src="images/room/' + SlideImg[i] + '.jpg" id="' + SlideImg[i] + '" class="' + classname + '" />';
SlideArea.innerHTML += html;
}
var a = 1;
function RunSlide() {
var before = a - 1;
if (a > SlideImg.length - 1) {
a = 0;
}
ImgBefore = document.getElementById(SlideImg[before]);
ImgBefore.className = 'not-active';
ImgNext = document.getElementById(SlideImg[a]);
ImgNext.className = 'active';
a++;
// set value of element on page so others can reference
document.getElementById("test1").innerHTML = a; // or set a hidden field
}
var run = setInterval(RunSlide, 5000);
}
</script>
您可能能够做到的另一种方法是使用值a声明函数的返回值,并且调用者可以在需要时忽略它而其他人可以检索它。这可能不适用于重新调用RunSlide函数的setTimeOut。我在SlideShow中尝试了另一个内部函数,但似乎没有返回任何一个。原始范围的建议仍然存在。