Уникальные идентификаторы HTML через цикл PHP - PullRequest
3 голосов
/ 16 октября 2011

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

Моя проблема: я строю небольшой сайт и столкнулся с проблемой генерации уникальных идентификаторов HTML.Я генерирую HTML через цикл в PHP, отправленный в шаблон smarty.Я признаю, что мои способности JavaScript не очень хороши, поэтому я не могу понять это ... Все, что я хочу, - это отображать форму комментария под каждой статьей при нажатии на ссылку «Добавить комментарий».

Вот JavaScript -

<script>
    function show_cform() {
        o = document.getElementById("comment_link");
        if (o) { o.style.display = ""; }
        o = document.getElementById("comment_form");
        if (o) { o.style.display = "none"; }
    }   
</script> 

И HTML, который повторяется несколько раз -

<div id="comment_form">
    <!-- Article Content Here -->
    <a href="javascript:show_cform();">Add a Comment</a>
</div>

<div id="comment_link" style="display: none;">
    <form method="post" action="blog_comment.php">
        <input type="hidden" name="ID" value="{$id}">
        Your Name:<br />
        <input name="name" type="text" />
        <br /><br />
        Comment:<br />
        <textarea name="comment" rows="8" cols="40"></textarea>
        <br /><br />
        <input type="submit" value="Post comment">
    </form>
</div>

Заранее спасибо за помощь!

Ответы [ 2 ]

1 голос
/ 16 октября 2011

Я бы сделал что-то вроде этого ( ИСПРАВЛЕНО ):

<script>
  function show_cform(formDiv) {
    // We pass the container into the function, so we can work out the rest
    var parts, idNum;
    // Get the number from the id
    parts = formDiv.id.split('_');
    idNum = parts[parts.length -1];
    // Change the display of the elements
    formDiv.style.display = "none";
    document.getElementById("comment_link_"+idNum).style.display = "block";
  }   
</script>

... и ...

<?php

  // Presumably you are generating this in a loop. I don't know how
  // your loop currently works, but you just need an incrementing
  // id that is unique to each iteration, and put it onto the end
  // of the id's of the elements

  // For example
  for ($i = 0; ($someCondition); $i++) {

?>

<div id="comment_form_<?php echo $i; ?>">

    <!-- Article Content Here -->

        <a href="javascript:show_cform(this.parentNode);">Add a Comment</a>
        </div>
        <div id="comment_link_<?php echo $i; ?>" style="display: none;">

                <!-- etc etc -->

  <?php } ?>

На самом деле, это совсем не то, что я буду делать, но я буду работать с тем, что у вас есть. У меня нет времени, чтобы объяснить, как именно я справлюсь с этим в данный момент, но я могу отредактировать этот ответ, когда у меня нет плачущего ребенка, с которым нужно иметь дело ...

0 голосов
/ 16 октября 2011

Во-первых, я настоятельно рекомендую использовать jQuery или какую-либо библиотеку абстракций javascript.Это сделает вашу жизнь намного проще.Я предполагаю, что вы используете какой-то цикл для откачки всех этих форм комментариев.Я бы предложил использовать какой-то префикс или суффикс для вашего идентификатора и установить его в div id и в href, который вы указали выше.В этом случае я просто использую префикс comment_link, а суффикс представляет собой целое число, которое увеличивается каждый раз в цикле:

<a href="javascript:show_cform(comment_link1);">Add a Comment</a>
<div id="comment_link1" style="display: none;">

и ваша функция:

function show_cform(theId) { .. }
...