Событие ejs onclick для ссылки внутри цикла for активирует все ссылки onclick - PullRequest
0 голосов
/ 03 ноября 2018

Внутри цикла ejs forEach у меня есть элементы со ссылками, например ::10000

<% someArray.forEach(function(someElement) { %>
    <div>
        <h5>someElement.title</h5>
        <a href="#" onclick="<% doSomeAction(someElement) %>">Some Action</a>
    </div>
<% }); %>

Когда я нажимаю на ссылку на одном элементе, он вызывает событие onclick для всех элементов в списке. Допустим, мой код Express выглядит так:

let someArray = [
    {
        title: 'Title 1',
        body: 'This is element 1'
    },
    {
        title: 'Title 2',
        body: 'This is element 2'
    }
];
let doSomeAction = (someElement) => {
    console.log(someElement.title);
};

Если я нажму на элемент, где title - «Заголовок 1», это то, что будет зарегистрировано в консоли:

Title 1
Title 2

Может кто-нибудь объяснить это поведение и что я должен исправить или как лучше это сделать. Я использую Express с ejs, у меня нет опыта работы с ejs, поэтому я, вероятно, что-то делаю не так.

1 Ответ

0 голосов
/ 03 ноября 2018

У меня недостаточно репутации, чтобы комментировать, но если вы решили проблему, вы можете ответить на свой вопрос.

В случае, если это не решено, вы проверяли вывод html в браузере ?, атрибут onclick должен быть пустым, без символа '=' в открывающем теге ejs, а способ, которым вы пытаетесь прикрепить события к элементам, неправильно.

Журналы консоли должны быть из-за какой-то другой части вашего кода.

Тем не менее, рабочий код будет таким,

<% someArray.forEach(function(someElement) { %>
   <div>
      <h5>someElement.title</h5>
      <a href="#" onclick="doSomeAction('<%=someElement.email%>')">Some Action</a>
   </div>
<% }); %>

И вы определяете doSomeAction в своем коде JavaScript FRONT END, а не на стороне сервера.

...