Как я уже писал в комментариях, я подозреваю, что функция вызывается неправильно, так как похоже, что она должна работать.
С другой стороны, вы можете немного упростить логику, если считаете, что то, что вы хотите, это то же самое, что сказать: " закройте предыдущий div, несмотря ни на что (в том числе, если он совпадает с текущим div) и открывать текущий div, только если он отличается от предыдущего".
Я бы также сохранил фактический элемент в prev_obj
вместо идентификатора и первоначально установил бы его на null
. Это упростит тестирование, если было prev_obj
, а также позволит вам использовать идентификатор «пусто», если это необходимо (конечно, вы, вероятно, не будете, но только лучшие практики).
var prev_obj = null;
function Toggle(id) { // Call it "id" to be clear it's not the actual object
// Hide previous object if it exists
if (prev_obj) prev_obj.style.display = 'none';
// Show current object if it's the same as the previous one
var obj = document.getElementById(id);
if (obj !== prev_obj) {
obj.style.display = 'block';
prev_obj = obj;
}
}
Убедитесь, что вы называете это, включив одинарные кавычки вокруг идентификатора:
<div onclick="Toggle('div-id-here')"></div>