在django和javascript中循环问题

时间:2017-04-30 14:56:47

标签: javascript python django

我使用django尝试重播评论,因为他们的ID。一切正常,但我只能通过javascript获取循环中的最后一项。

{% for comment in object_comments %}
   <li>
      <article>
         <div class="comment-avatar">
            <img src="images/blog/author.png" class="avatar">
               <span class="comment-reply">
                  <a id='reply' class="comment-reply-link" onClick="a_onClick()">Reply</a>
               </span>
         </div>

         <script>
            function button_onClick() {
               $('').click();
            }
            function a_onClick() {
               window.scrollTo(0,document.body.scrollHeight);

               document.getElementById('text').value = "{{comment.name}}";
            }
         </script>

         <div class="comment-body">
            <div class="meta-data">
               <a href="#" class="comment-author">{{ comment.name }}</a>
               <span class="comment-date">
                  {{ comment.pub_date }}
               </span>
            </div>
            <div class="comment-content">
               {{ comment.text }}
            </div>
         </div>
      </article>
   </li>
{% endfor %}

数据由document.getElementById('text').value = {{comment.name}};

分析

有人可以帮忙找一些解决方法吗?

1 个答案:

答案 0 :(得分:0)

你只得到最后一个值的原因是你的<script>函数在for循环中,所以你的Django循环输出的代码包含这个脚本代码n次,使用每次使用相同的函数名称。因此,每个定义“覆盖”,即替换前一个定义。因此,浏览器的Javascript解释器使用的a_onClick()的唯一定义是循环的最后一次迭代,循环中的最终{{ comment }}

您的代码段不包含该功能更改的#text元素,因此我无法完全遵循该功能。但为了防止您所描述的错误,首先将您的<script>代码移到Django for循环之外 - 将其放在循环之后,或者放在文档正文的末尾。然后你的函数调用需要为循环中的每个项传递正确的comment.name。您可以在循环内执行以下操作:

onclick="a_onClick('{{ comment.name }}')";

然后将您的功能更改为:

function a_onClick(comment_name) {
  window.scrollTo(0,document.body.scrollHeight);
  document.getElementById('text').value = comment_name;
}