2012-01-13 10 views
0

ユーザーが要素をクリックして隠されているものを表示できるようにする簡単なJavaScriptコードを作成しました。JavaScriptで一度に1つの要素を表示するにはどうすればいいですか?

しかし、私のコードでは、ユーザーはすべての要素をクリックして同時にすべてを表示することができます。

誰かが正しい方向に私を押し込むことができるのだろうか?あなたが他のdivを通過し、その要素を非表示にする必要があるいずれかの要素を表示する場合http://jsfiddle.net/MTJa5/

var hellos = function(){ 
    var divClicks = document.getElementsByClassName("clickToShow"); 
    for(i=0; i < divClicks.length; i++){ 
     var click = divClicks[i]; 

     var close = function(){ 
      var open = false; 

      click.addEventListener("click", function(e){ 
      e.preventDefault(); 
       if(open){ 
        this.childNodes[3].setAttribute("class", "hidden"); 
        open = false; 
       } else { 
        this.childNodes[3].setAttribute("class", "show"); 
        open = true; 
       } 
      },false); 
     }(); 
    } 
}(); 
+0

Iあなたのデモで 'div'sをクリックすると、隠された要素は1つだけトグルされます。それはあなたが探している行動ではありませんか? – cheeken

+0

ええ、クリックして開くことができます。私はそれがあなたが1つを開いて別のものをクリックすると、最初のものが閉じられるようにしたい。 – jamcoupe

+0

jqueryを使用できますか? – redmoon7777

答えて

1

はこれを試します変更あり::

var hellos = function(){ 
    var divClicks = document.getElementsByClassName("clickToShow"); 
    for(i=0; i < divClicks.length; i++){ 
     var click = divClicks[i]; 


     var close = function(){ 
      var open = false; 
      click.addEventListener("click", function(e){ 
       var divVisible= document.getElementsByClassName("show"); 
     //alert(divVisible.length); 
     for(j=0; j < divVisible.length; j++){ 
      divVisible[j].setAttribute("class", "hidden"); 
     } 

      e.preventDefault(); 
       if (open){ 
       this.childNodes[3].setAttribute("class", "hidden"); 
        open = false; 
       }else{ 
        this.childNodes[3].setAttribute("class", "show"); 
        open = true; 
       } 

      },false); 
     }(); 
    } 
}(); 

ここには説明::

あなたのクリックイベントに

私はclass=showで、私は再びあなたのコードはクリックでそれぞれのdivを表示する、ものを扱う休まclass=hiddenを設定している

for loop内のすべてのdiv要素を発見した

0

:ここ

はデモです。

EDIT:このフィドルを参照してください。これはあなたのフィドルで完全なjavascriptのです

.. http://jsfiddle.net/MTJa5/22/

+0

は恐れています。 – jamcoupe

+0

クリックハンドラに入っているのを忘れていたので、 'i'はチェックするのが間違っています。コードを更新しました。もう一度やり直せますか? – spb

+0

すべてをクリックしてから最初または2番目をクリックすると、2回クリックするだけで開くことができます。 – jamcoupe

関連する問題