的載體作用內復位如果你可以讓一個變量全球的範圍,那麼你應該可以。取而代之的是在你的函數中聲明,而不是在頁面的「< head>」中聲明變量並聲明。看我的例子,我測試並點擊差異鏈接更改變量的值並在頁面上顯示。
<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時,可以在頁面上設置隱藏字段的值,然後其他人可以引用該值。任何其他方式,我認爲你必須在功能之外聲明它。
ALTERNATE 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的值的函數返回,並且呼叫者可以忽略它,如果他們想和別人做不到檢索它。這可能不適用於您的setTimeOut重新調用RunSlide函數。我嘗試了SlideShow中的另一個內部函數,但似乎並沒有返回。原定範圍的建議仍然存在。
對不起,但我真的不明白這個問題。是不是隻是在'SlideShow'之外聲明'a'的情況? – freefaller 2012-07-15 15:46:52
由於'a'變量不在全局範圍內,我可以從另一個函數訪問它嗎? – 2012-07-15 15:50:20
正確的,通過在'SlideShow'中聲明它,只有該函數(和'RunSlide')可以訪問它。聲明它的功能之外,它將全球訪問 – freefaller 2012-07-15 15:54:01