ID для каждого элемента JavaScript и PHP

   <a class = "glyphicon glyphicon-heart-empty" style = "font-size: 50px;color: red" id = "'.$item['id'].'" onclick = "changeH()"></a>
   <script type = "text/javascript">
       function changeH() {
           if (document.getElementById('<?php echo $item['id'];?>').className == "glyphicon glyphicon-heart")
               document.getElementById('<?php echo $item['id'];?>').className = "glyphicon glyphicon-heart-empty";
           else {
               document.getElementById('<?php echo $item['id'];?>').className = "glyphicon glyphicon-heart";
           }
       }
   </script>

Я хочу, чтобы в каждом элементе отображалось пустое сердечко, И когда я щелкнул по одному из них, отобразилось полное сердечко. У меня это работает, только когда я создаю символ или целочисленный идентификатор, но не с PHP.

Помоги мне, пожалуйста !!!

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
43
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы подходите к этому совершенно неправильно. Вы создаете новый тег <script> для каждой ссылки и продолжаете перезаписывать функцию changeH() новой функцией, специфичной для последней созданной вами ссылки.

Вместо этого попробуйте что-нибудь вроде этого:

<?php foreach($links as $item): ?>
<a class = "glyphicon glyphicon-heart-empty" style = "font-size: 50px;color: red" id = "<?php echo $item['id']; ?>" onclick = "changeH(this);"></a>
<?php endforeach; ?>

<script>
    function changeH(link) {
        if (link.className == "glyphicon glyphicon-heart") {
            link.className = "glyphicon glyphicon-heart-empty";
        }
        else {
            link.className = "glyphicon glyphicon-heart";
        }
    }
</script>

Я бы посоветовал почитать об обработке событий JavaScript в MDN. (Вы также можете лучше реализовать изменение класса CSS, но сейчас это не является предметом рассмотрения этого вопроса)

у меня уже есть foreach для отображения других столбцов из элемента таблицы: /

Omar Krichen 21.04.2018 12:53

Это нормально, дело не в foreach. Дело в том, чтобы иметь только один тег <script>, в котором вы определяете функцию changeH, и вызывать эту функцию из обработчика событий всех тегов <a>, передавая this в качестве параметра. Вам даже не нужны идентификаторы (по крайней мере, для изменения значка).

Máté Safranka 21.04.2018 12:55

Другие вопросы по теме