変数のスコープをグローバルにできる場合は、できるはずです。関数で宣言する代わりに、変数を参照してページの「< 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
ただし、関数を微調整してページ上の別の要素の値を設定する方法があり、他の人がその値を参照できます。スクリプトに同じコード スニペットを使用すると、更新時にページの非表示フィールドの値を設定でき、他のユーザーがその値を参照できます。関数の外で宣言する必要があると思う他の方法。
代替 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 内で別の内部関数を試しましたが、いずれかを返すようには見えませんでした。元のスコーピングの提案が残っています。