1秒後に数字を1つずつ表示したいが、下の数字は一緒に数字を表示する。1秒後に数字を1つずつ表示したい
function showVal(){
for(i=0; i<5; i++)
{
var showingVal= document.write("the number is "+i);
document.write("<br />");
}
}
setInterval('showVal()',1000);
1秒後に数字を1つずつ表示したいが、下の数字は一緒に数字を表示する。1秒後に数字を1つずつ表示したい
function showVal(){
for(i=0; i<5; i++)
{
var showingVal= document.write("the number is "+i);
document.write("<br />");
}
}
setInterval('showVal()',1000);
をクリアする代わりに、グローバル変数を使用して、関数内でループを使用して、関数内でそれを使用してチェックしません。
function showVal(n) {
if(!n)
n = 0;
var showingVal = document.write("the number is " + n);
document.write("<br />");
if(n < 4) {
setTimeout(function() { showVal(n + 1); }, 1000);
}
}
setTimeout(showVal, 1000);
デモ:あなたは5つの数字を印刷した後、あなたのダニハンドラが呼び出されませんので、http://jsbin.com/avunif
それはsetInterval
よりはましです。効率。グローバル変数はありません。 :-)
代わりにclearInterval
することができます。
+1グッド解決策、グローバル変数を避ける。 –
thnx to all fine .... :) –
ページが完成したら、 'document.write'を使うことはできません。私はFirefoxとIEでデモを試みましたが、うまくいきません。 – Guffa
は数が上限に達した場合、それは代わりにsetTimeout
を使用することをお勧めしますあなたの間隔
間隔を置いてdocument.write
を使用することはできません。これは、完了後に文書に書き込むので、代わりに文書がテキストに置き換えられます。
また、関数内のコードは一度に1つの数値を出力しません。すべての数値を一度に出力します。関数の外にカウンターが必要なので、それがどこにあるのかを追跡することができます。
clearInterval
を使用すると、すべての数値が出力されたら間隔を停止できます。
ページ内に既に存在する要素の内部にテキストを配置します。ページの要素の下にコードを配置して、コードの開始時に要素が作成されるようにします。
<div id="SomeElement"></div>
<script type="text/javascript">
var handle, counter = 0, text = '';
function showVal(){
if (counter < 5) {
text += "the number is " + counter + "<br />";
document.getElementById("SomeElement").innerHTML = text;
counter++;
} else {
window.clearInterval(handle);
}
}
handle = window.setInterval(showVal, 1000);
</script>
デモ:http://jsfiddle.net/Guffa/CY5DV/
(。それは変数とグローバルスコープを汚染しないように、これは閉鎖中で行うことができますが、それは、この問題の主要な問題のために重要ではありません)
あなたのロジックに欠陥があります。 1秒に1度 'showVal'を呼び出しています。そして、それぞれの呼び出しで、番号を書き出すために' 0'から '4'まで繰り返しています。通話には番号を1つだけ書き込む必要があります。 –