#javascript #node.js #handlebars.js
Вопрос:
В приведенном ниже коде я использовал handlebars.js для шаблонов, в которых он создает каждое пожертвование с сервера, но событие onClick не влияет на все повторяющиеся div, оно влияет только на первый div. Как исправить такую проблему с помощью handlebars.js?
{{#each donations}}
<div id="changeCss">
<h1>Donar name: {{donar}}</h1>
<h1>Food item:{{fooditems}}</h1>
<h1>Quantity:{{quantity}}</h1>
<h1>Meeting point: {{meetingpoint}}</h1>
<h1>Food type: {{foodtype}}</h1>
<h1>Contact no: {{contactno}}</h1>
<button onclick="changed()" id="idOfButton">I will deliver</button>
</div>
{{/each}}
<script>
function changed(){
document.getElementById('changeCss').style.cssText ='background-color:green; color:white' ;
document.getElementById("idOfButton").disabled= true;
</script>
Комментарии:
1. Недопустимо, чтобы один и тот же идентификатор HTML дублировался во многих элементах. Я думаю, вам следует найти решение, в котором используется селектор, отличный от ID.
Ответ №1:
Вы создаете много div
блоков с одним и тем же идентификатором changeCss
, и
document.getElementById('changeCss')
всегда обращайтесь к первому соответствующему div.
Я предполагаю, что вы хотите изменить только div, в котором нажата кнопка. 1 решение состоит в том, чтобы передать текущую кнопку в качестве параметра changed
функции. Затем мы применяем CSS к родительскому элементу (div) и отключаем текущую кнопку.
Приведенный ниже код демонстрирует то, что я сказал для 2 одинаковых блоков. `
function changed(element){
// element is the button you clicked
element.parentElement.style.cssText ='background-color:green; color:white' ;
element.disabled= true;
}
<div id="changeCss">
<h1>Donar name: {{donar}}</h1>
<h1>Food item:{{fooditems}}</h1>
<h1>Quantity:{{quantity}}</h1>
<h1>Meeting point: {{meetingpoint}}</h1>
<h1>Food type: {{foodtype}}</h1>
<h1>Contact no: {{contactno}}</h1>
<button onclick="changed(this)" id="idOfButton">I will deliver</button>
</div>
<div id="changeCss">
<h1>Donar name: {{donar}}</h1>
<h1>Food item:{{fooditems}}</h1>
<h1>Quantity:{{quantity}}</h1>
<h1>Meeting point: {{meetingpoint}}</h1>
<h1>Food type: {{foodtype}}</h1>
<h1>Contact no: {{contactno}}</h1>
<button onclick="changed(this)" id="idOfButton">I will deliver</button>
</div>