Div #id в цикле foreach выбирает только последнюю переменную при попытке показать/скрыть в функции

Я перемещаюсь по простому циклу foreach, чтобы получить «сообщения в блоге». Он показывает основную информацию о блоге, кнопку ответа и удаления. Когда я нажимаю кнопку «ответить», появляется небольшая форма под кнопкой ответа для заполнения. Проблема в том, что функция, которой я передаю переменную, получает только последний идентификатор формы. Как изменить свою функцию или элемент div, чтобы он был уникальным для каждого экземпляра?

Я попытался настроить переменную PHP @echo для «id» и функции, я проверил все открывающие и закрывающие скобки в 10 раз. Я пробовал использовать разные методы GetElementBy.... Я начал изучать Jquery, но хотел закончить только с помощью PHP/Javascript.

<?php foreach ($mainentries as $entry) : 
$subentryID = $entry['SubEntryID'];
  if ($subentryID == "0") 
  { ?>
      <div><tr><td><?php echo ('#'.$entry['EntryID'].' - ')?></td>
               <td><?php echo $entry['Body']; ?></td>
               <br />
               <?php foreach($subentries as $subentry) : ?>
               <?php if ($subentry['SubEntryID'] == $entry['EntryID']) 
                     {   ?>
              <div id = "subposts">
              <td><td><td>#<?php echo $subentry['EntryID'];?></td><br>
              <td>
              <?php echo $subentry['Body']; ?>
              </td></td></td>
       </div>
       <?php } endforeach; ?>
       <br />
       <td>
<button onclick = "cookiechecksub()">Reply</button>
    <?php echo $entry['EntryID']; 
     $subform = $entry['EntryID']; ?>
     <div id = "<?php echo $subform?>" style = "display:none">
     <form action = "Add_subentry.php" method = "post" id = "Add_subentry"> 
     <label>Title:</label><br /> 
     <input type = "text" name = "Title" class = "Title"/> <br />
     <label>Body</label><br />
     <div class = "area">
     <input type = "textarea" name = "Body" class = "Body"/><br />
     </div>
     <input type = "hidden" readonly = "true" name = "EntryID" value = "<?php echo $entry['EntryID']; ?>" />
     <input type=submit id = "btnReply" value = "Submit Reply"/>
     </form>
     </div></td>
     <td>
     <form action = "Delete_entry.php" method = "post" id = "Delete_entry">    
     <input type = "hidden" readonly = "true" name = "EntryID" value = "<?php echo $entry['EntryID']; ?>" />
     <?php if ($userid == 1) 
     { ?>
     <input type = "submit" id = "btnDelete" value = "Delete Post"/>
     <?php } ?>
     <br /><br />
     </form>
     </td>
     </tr>
     </div>
     <?php 
} endforeach; ?>
<Script>
function cookiechecksub() {
    if (!userid) {
        if (confirm("Please log in first")) {
            window.location.replace("http://localhost/alexdes/login-logout.php");
            }
        }
    else {
        TryAddSubPost();
    }
}
function TryAddSubPost() 
{
    var x = document.getElementById("<?php echo $subform?>");
    if (x.style.display === "none") 
    {
        x.style.display = "block";
    } 
    else 
    {
        x.style.display = "none";
    }
}
</Script>
Поведение ключевого слова "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
240
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Дайте cookiechecksub аргумент и передайте его TryAddSubPost

<button onclick = "cookiechecksub('<?=$entry['EntryID']?>')">

извините, неправильно отредактировал, а потом случайно отправил, хотел отредактировать свой пост

am05mhz 13.05.2019 07:14
Ответ принят как подходящий

это потому, что вы использовали эхо php в функции js, особенно в TryAddSubPost

измените это так:

<script>
function cookiechecksub(id) {
    if (!userid) {
        if (confirm("Please log in first")) {
            window.location.replace("http://localhost/alexdes/login-logout.php");
            }
        }
    else {
        TryAddSubPost(id);
    }
}
function TryAddSubPost(id) 
{
    var x = document.getElementById(id);
    if (x.style.display === "none") 
    {
        x.style.display = "block";
    } 
    else 
    {
        x.style.display = "none";
    }
}
</script>

и использовать идентификатор из php только при вызове функции, например:

<button onclick = "cookiechecksub('<?php echo $entry['EntryID']?>')">Reply</button>

Это сработало, я новичок в JS и до сих пор не могу определить, когда передавать переменные и тому подобное. Огромное спасибо!!

Alex Desruisseau 13.05.2019 20:08

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