Handlebars.js и каждый помощник: проблема с кнопками

#handlebars.js

#handlebars.js

Вопрос:

Я новичок в Handlebars.js . Я использую каждую из них для отображения некоторой учетной записи.Мне нужно получить информацию о конкретном пользователе, нажимающем кнопку. Я буду более конкретен с кодом.

 
{{#each accounts}}

      <div class="form-group">
        <p>{{@index}}</p>
        <label for="name" value={{username}}>{{username}}</label>
      </div>
      <div class="form-group">
        <label for="name">{{email}}</label>
      </div>
      <button id="myButton">chat</button>


    {{else}}
    <p>No account</p>
    {{/each}}



<script>
  const button = document.getElementById('myButton');
  button.addEventListener('click', function(e) {
  console.log('button was clicked');
  const number = document.querySelector("p");
   console.log(number);
  });

</script>
  

Если я нажму первую кнопку списка, я смогу получить доступ к данным, однако, если я попытаюсь нажать другие кнопки списка, я не смогу получить доступ к информации.
Например, если я нажму 3-ю кнопку, я хотел бы получить информацию о руле 3-й учетной записи.

Ответ №1:

У вас в цикле есть id =»MyButton». Идентификаторы должны быть уникальными, и с вашим кодом вы получите столько кнопок с id = «MyButton», сколько у вас учетных записей. Попробуйте вместо этого добавить класс, если вы хотите добавить свое событие для всех кнопок.

 {{#each accounts}}

      <div class="form-group">
        <p>{{@index}}</p>
        <label for="name" value={{username}}>{{username}}</label>
      </div>
      <div class="form-group">
        <label for="name">{{email}}</label>
      </div>
      <button id="myButton{{@index}}" class="myButton">chat</button>


    {{else}}
    <p>No account</p>
    {{/each}}



<script>
  const buttons = document.getElementsByClassName('myButton');
  buttons.addEventListener('click', function(e) {
  console.log('button was clicked');
  const number = document.querySelector("p");
   console.log(number);
  });

</script>
  

Комментарии:

1. Спасибо за ответ. Что вы подразумеваете под созданием класса MyButton?

2. чтобы добавить class=»MyButton» к кнопке вместо id = «MyButton», а также вы должны сделать идентификатор уникальным, добавив (например) индекс цикла id=»MyButton{{@index}}»

3. Спасибо за ваши ответы. Я решил проблему. У меня есть к вам еще один вопрос. Как я могу получить доступ в handlebar к определенному элементу массива, созданного с помощью каждого (Accounts[0]. Имя, учетные записи [1]. фамилия и т.д.)?

4. Вы имеете в виду {{accounts.0.name }} и {{учетныезаписи.0.фамилия}} ?