TransWikia.com

как передать по клику значение из списка foreach в javascript

Stack Overflow на русском Asked on January 11, 2021

Из БД выгружается список эвентов и выводится он через foreach. Список отсортирован по дате, но id эвентов идут не по порядку, например 28, 11, 35, 19… В каждой строке эвента есть кнопка [ЗАПИСАТЬСЯ], при клике на которую из javascript происходит переход на страницу этого эвента. Весь этот наворот возник из-за создания на этой кнопке цели «JavaScript-событие» из яндекс-метрики.
Ни как не могу передать в скрипт id_event. Передаю его от сюда <input type="hidden" class="event<?=$id_event;?>". Как принять его тут let id_event = document.querySelector('.event').value;

    foreach ($rows as $value)
    { 
      $id_event = $value->id_event; ?>

      <form name="event_mk<?=$id_event;?>" action="" >
        <input type="hidden" class="event<?=$id_event;?>" value="<?= htmlspecialchars($id_event); ?>">
        <input type="button" class="btn" id="targetmk<?=$id_event;?>" onclick="ym(xxxxxx,'xxxxxx','xxxxxx'); return true;" name="targetmk" value="ЗАПИСАТЬСЯ" />
      </form> 
   `<?}?>`

<script type="text/javascript">
    let id_event = document.querySelector('.event').value;
    
    document.getElementById("targetmk" + id_event).onclick = function()
    {
        document.location.href = "/timetable-mk?record_mk=" + id_event;
    }
</script>

One Answer

Добавим класс record-btn и дата атрибут data-record-id на кнопки

 <form name="event_mk<?=$id_event;?>" action="" >
    <input type="hidden" class="event<?=$id_event;?>" value="<?= htmlspecialchars($id_event); ?>">
    <input type="button" class="btn record-btn" data-record-id = "<?=$id_event;?>" id="targetmk<?=$id_event;?>" onclick="ym(xxxxxx,'xxxxxx','xxxxxx'); return true;" name="targetmk" value="ЗАПИСАТЬСЯ" />
</form>

Поменяем чуть логику самого js

<script type="text/javascript">

    let myListener = function() {
        let id = this.getAttribute("data-record-id");
        document.location.href = "/timetable-mk?record_mk=" + id;
    };

    let items = document.querySelectorAll('.record-btn');

    items.forEach(el => el.addEventListener('click', myListener));
</script>

Correct answer by Вадим Александру on January 11, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP