2017-03-01 17 views
0

私はプログラマーではないので、私が正しいものを書かないと私はあなたが私を許してくれることを願っています。タグを表示/非表示に切り替える方法

私は第一を示したときに第二は隠しておよびその逆されることをJavaScriptでコードを書くことを試みた二つの異なる「ID」

を持つ2つのフィールドセットを持っています。

どこが間違っているのか分かりません。 私を助けることができますか?ここで HTML

<label onclick="add()"></label> 
<label onclick="modify()"></label> 
<fieldset id="add">some text</fieldset> 
<fieldset id="modify">some other text</fieldset> 

、ここで私のjavascriptのテキスト

function add() { 
    var x = document.getElementById('add'); 
    if (x.style.display === 'none') { 
     x.style.display = 'block'; 
    } else { 
     x.style.display = 'none'; 
    } 
} 
function modify() { 
    var y = document.getElementById('modify'); 
    if (y.style.display === 'none') { 
     y.style.display = 'block'; 
     x.style.display = 'none'; 
    } else { 
     y.style.display = 'none'; 
    } 
} 

問題は、私が最初にオープンをクリックすると、別でも、それが閉じます]をクリックしますがないとき、私はそれをしたいと思いだけではなく、ということです1つのフィールドセットが表示されているとき、もう1つのフィールドセットが表示され、逆の表示になります。

ありがとうございました

+0

あなたはそれがmodify' ''内部undefined'ですので、 '' y' – Smit

+1

'X'がadd' 'の範囲内で定義されていないX 'IDのスタイルで遊んでいるmodify''の下で! –

+0

'var x = ...;'と 'var y = ...;'を両方の関数の上部と外部に作ってください! –

答えて

0

変更機能でxを定義する必要があります。または、@ibrahimが言ったように、すぐに両方の変数を定義してください。

function modify() { 
    var y = document.getElementById('modify'); 
    var x = document.getElementById('add') 
    if (y.style.display === 'none') { 
     y.style.display = 'block'; 
     x.style.display = 'none'; 
    } else { 
     y.style.display = 'none'; 
    } 
} 
+0

「変更」が表示されているときに「追加」をクリックすると表示されません。他のブロックでx.style.display = 'block'を追加する必要があります – Abhishek

0

あなたが働きたい場合は、単純な修正。

function add() { 
    var x = document.getElementById('add'); 
    var y = document.getElementById('modify'); 
    if (x.style.display === 'none') { 
     x.style.display = 'block'; 
     y.style.display = 'none'; 
    } else { 
     x.style.display = 'none'; 
    } 
} 
function modify() { 
    var x = document.getElementById('add'); 
    var y = document.getElementById('modify'); 
    if (y.style.display === 'none') { 
     y.style.display = 'block'; 
     x.style.display = 'none'; 
    } else { 
     y.style.display = 'none'; 
    } 
} 

お分かりのように、どちらもxとyのvarがあるため、いずれも未定義ではありません。コードをきれいにするために移動するには、メソッドの外でVARを持参することを望むかもしれない(コードの重複を減らす)

+0

このソリューションを使用すると、開いてクリックすると同じフィールドセットが有効になりますが、最初の開いた状態で2番目のボタンをクリックすると、 –

+0

@ S.Iandoloが更新されました! – Smit

+0

私は両方の機能で行を追加しました。私が追加したのは:y.style.display = 'none'と2番目のx.style.display = 'none' –

1

あなたは

機能以下
function hideShow(targetId) { 
    var targetNode = document.getElementById(targetId); 
    if(targetNode.style.display === 'block') { 
     return; // If click is on the node which is already shown, just return 
    } 
    var x = document.getElementById('add'); 
    var y = document.getElementById('modify'); 
    if (x.style.display === 'none') { 
     x.style.display = 'block'; 
     y.style.display = 'none'; 
    } else { 
     y.style.display = 'block'; 
     x.style.display = 'none'; 
    } 
} 

を使用し、

、両方に同じ機能を使用することができます
<label onclick="hideShow('add')"></label> 
<label onclick="hideShow('modify')"></label> 
<fieldset id="add">some text</fieldset> 
<fieldset id="modify">some other text</fieldset> 
+0

私は最初のすべてのOKをクリックすると、同じ問題が発生します。もう1つのOKをクリックすると、クリックしたときに同じ問題が発生します。再び第2の、最初はまだ開いています –

+0

@ S.Iandolo私は上記のケースを処理するための答えを更新しました。一度更新された回答を試してください – Abhishek

関連する問題