2016-09-29 6 views
0

ラジオボタンの選択を一定間隔で自動的に変更したい。 2000msごとにforループでsetTimeOutを呼び出していますが、ラジオボタンの選択は設定した間隔に関して変更されていません。 は、ここに私のコードです: HTML:定期的なラジオボタンの選択が機能しない

<input type="radio" id="carousel1" name="carousel" checked="checked"> 
<input type="radio" id="carousel2" name="carousel"> 
<input type="radio" id="carousel3" name="carousel"> 

Javascriptを:

function autoSlideCarousel() { 
    for (var n = 1; n <= 3; n++) { 
    setTimeout(autoSlide(n), 2000); 
    } 
} 

function autoSlide(n) { 
    console.log(n); 
    document.getElementById("carousel"+n).checked = true; 
}   

window.onload = autoSlideCarousel(); 

は、ここでより明確にするためJSFiddleリンクです:https://jsfiddle.net/16zmfb12/1/

はあなたの助けに感謝します。

+3

'setTimeout'には関数が渡されます。 'autoSlide(n)'の戻り値を渡しています。これは 'undefined'です。同様に、関数を 'window.onload'に代入する必要があります。現在、 'undefined'である' autoSlideCarousel() 'の戻り値を代入しています。 * "2000msごとにforループでsetTimeOutを呼び出しています" *そうではありません。ループは、タイムアウトが発生するまで待機しません。 'setTimeout'をほぼ即座に3回呼び出します。これらはすべて以前に議論された問題である。 [setTimeout()が待機していない](http://stackoverflow.com/q/15171266/218196) –

答えて

0

私はコードで遊んで、次の解決策になってしまった: HTML:

<div id="carousel">CSS carousal</div> 
<br> 
<input type="radio" id="carousel1" name="carousel" checked="checked"> 
<input type="radio" id="carousel2" name="carousel"> 
<input type="radio" id="carousel3" name="carousel"> 

CSS:

#carousel { 
    width: 200px; 
    height: 200px; 
    padding:20px; 
    background: brown; 
    color: #fff; 
    text-align: center; 
    font-size: 36px; 
} 

Javascriptを:上記

var n = 0; 
window.ev = false; 
function autoSlide() { 
     document.getElementById("carousel").onmouseenter = function() { 
      window.ev = true; 
     }; 

     document.getElementById("carousel").onmouseleave = function() { 
      window.ev = false; 
      setTimeout(autoSlide, 2000); 
     }; 

     if (window.ev == false) { 
      n++; 
      if (n === 4) 
       n = 1; 
      document.getElementById("carousel" + n).checked = true; 
      setTimeout(autoSlide, 2000); 
     } 
    } 
    autoSlide(); 

ソルート私は、2000msごとにラジオボタンの選択が変わると無限ループになり、カルーセルdiv要素にフォーカスが入るとすぐに停止します。 https://jsfiddle.net/16zmfb12/13/

0

使用setInterval代わりに、このような何か:

function autoSlideCarousel() { 
    setInterval(function() { 
     if(n == 3) 
     n = 1; 
     else if(n == 2) 
     n = 3; 
     else 
     n = 2; 
     autoSlide(n) 
    }, 2000); 
} 
1

、一度にすべての3 setTimeoutsを実行しない代わりに、forループのカウンタのためのグローバルなVARを使用し、そして最後にsetTimeoutメソッドを追加するためには、 autoSlide()関数の

var n = 1; 

function autoSlide(n) { 
    console.log(n); 
    document.getElementById("carousel"+n).checked = true; 
    if (n<3) { 
    setTimeout(function() {autoSlide(n+1)},2000); 
    } 
}   

window.onload = function() {autoSlide(n)}; 
+0

パーフェクト、ありがとう。私はその論理を理解した。 – SatAj

+0

前のコメントで述べたように、これは正しくありません:window.onload = autoSlide(n);これはassignSlideの戻り値をwindow.onloadに割り当てます。これはあなたが望むものではない可能性が最も高いです。関数自体をwindow.onloadに割り当てる必要があります。 – mangotang

+1

@マンゴタンが正しいです、申し訳ありません。最後の行は、 でなければなりません。window.onload = function(){autoSlide(n)}; –

関連する問題