Заполнены ли все записи на вашей странице из данного шаблона, то есть они div
с классом entry
? Если это так, я думаю, что ваша проблема заключается в следующем: у вашего entry
div
есть ребенок div
с id="add-info"
. И когда вы нажимаете кнопку, ваша функция-обработчик (myFunction()
) пытается получить ссылку на этот div
через document.getElementById("add-info");
Теперь, если у вас есть несколько таких записей на странице, у вас будет несколько div
с id="add-info"
. Но атрибут id
элемента должен быть уникальным во всем документе . См. Описание id
или getElementById()
.
Таким образом, основная причина вашей проблемы заключается в том, что один и тот же id
используется в документе несколько раз, когда это не должно быть. Вы получаете поведение, которое видите, потому что getElementById()
просто возвращает ссылку на первый элемент, который он находит на странице, независимо от того, какую кнопку вы нажимаете. Но я полагаю, что в этот момент вы находитесь на неопределенной территории поведения.
Одним из способов решения этой проблемы является предоставление myFunction()
информации о том, какая кнопка была нажата, при этом каждый div
вы хотите манипулировать уникальными, чтобы их было легче найти. Например, вы можете использовать порядок ресторана на своей странице в качестве «индекса» и использовать его как id
из div
, который вы хотите скрыть / показать. И вы также можете передать этот индекс в качестве аргумента при вызове обработчика кликов:
...
<button id="btn" class="button-primary" onclick="myFunction('{{index}}')">Hide</button>
<div id="{{index}}">
<!-- The rest of the code here... -->
...
... добавить индекс в контекст вашего шаблона, чтобы Handlebars
мог заполнить {{index}}
заполнитель:
...
$.each( tabletop.sheets("food").all(), function(i, food) {
food.index = i // Give your context its 'index'
var html = template(food);
$("#content").append(html);
});
...
... и затем слегка измените вашу функцию, чтобы использовать заданный аргумент вместо того, чтобы всегда искать div
с id="add-info"
:
function myFunction(indexToToggle) {
var x = document.getElementById(indexToToggle);
// rest of the code is same
При таком подходе я ожидаю, что ваша DOM будет иметь div
s, которые имеют id
s, которые являются просто числами ("3"
, "4"
и т. Д.), И ваш обработчик кликов должен вызываться с этими в качестве аргументов.
Также обратите внимание, что ваш <button>
элемент имеет id="btn"
. Если вы повторите этот шаблон на своей странице, у вас будет несколько <button>
с одним и тем же id
. Если вы начнете пытаться получить ссылки на ваши button
s через id
, у вас будут похожие проблемы с ними, так как id
s не будут уникальными.