2016-01-21 56 views
0

我試圖影響單擊另一個元素時元素高度的更改。我正在使用if else語句來切換來回切換。vanilla js onclick if statement issue

var bnr = document.getElementById("bnr"); 
var btn = document.getElementById('btn'); 

if (bnr.style.height = "250px") { 
    btn.onclick = function() { 
    bnr.style.height = "600px"; 
    }; 
} 
else if (bnr.style.height = "600px") { 
    btn.onclick = function() {; 
    bnr.style.height = "250px"; 
    }; 
}; 

第一條語句的作品,改變要素高度600像素,不過第二條語句不工作和元素停留在600px的,如果你再次點擊。

是否有人能夠看到我在哪裏出錯?

JS Fiddle example

+4

的if語句應該是「==」而不是「=」 –

+0

這似乎已經停止了工作完全https://jsfiddle.net/66un8s8a/ –

+0

你應該試着用調試器來代碼,並且你會很快發現問題。 – 2016-01-21 15:40:54

回答

0

你的代碼運行在頁面加載(我認爲)和高度爲250像素,在這一點上,創建一個click事件的高度設置爲600像素。每次點擊按鈕時,都會運行相同的事件,因爲問題中的代碼將不會再次運行。我想你想:

var btn = document.getElementById('btn'); 

btn.onclick = function() { 

    var bnr = document.getElementById("bnr"); 

    if (bnr.style.height === "250px") 
    { 
     bnr.style.height = "600px"; 
    } else { 
     bnr.style.height = "250px"; 
    } 
}; 
+0

這太好了,謝謝你的幫助 –

+0

這似乎不幹,重複「250px」。我也認爲至少應該建議避免直接在元素上設置,檢查和重置樣式的反模式。 – 2016-01-21 15:33:03

+0

@torazaburo - 它回答了這個問題,解釋了他們(從根本上)出錯的原因。你的回答會讓這個問題變得有些模糊 - 如果你不同意,請隨時提供你自己的答案。 – Paddy

0

你shold這樣做:

var bnr = document.getElementById("bnr"); 
var btn = document.getElementById('btn'); 

btn.onclick = function() { 
    if (bnr.style.height == "250px" || !bnr.style.height) 
    { 
     bnr.style.height = "600px"; 
    }  
    else if(bnr.style.height == "600px") 
    { 
     bnr.style.height = "250px"; 
    };  
}; 

https://jsfiddle.net/crfdhtes/1/

0

這是更好地使用類操作來更改元素的樣式。所以,你可以添加「擴展」類:

#bnr.expanded { 
    height: 600px; 
} 

和撥動它點擊:

var btn = document.getElementById('btn'); 

btn.onclick = function() { 
    var bnr = document.getElementById('bnr'); 
    bnr.classList.toggle('expanded'); 
}; 
+0

這應該是被接受的答案。 – 2016-01-21 15:36:02

+0

如果出現問題,在IE <10時不起作用。 – Paddy