Django模板for循环渲染的心愿单条目仅可删除第一项如何解决
问题原因
- 核心问题是HTML元素ID全局重复:你在for循环中给所有删除表单设置了固定ID
upvote1,而DOM规范要求同一页面内ID必须唯一。document.getElementById('upvote1')只会匹配到页面中第一个出现该ID的元素,因此只有第一个条目能正常触发提交。
修改方案
只需要给每个表单绑定唯一ID,同时对应修改删除按钮的提交逻辑即可,有两种常用实现方式:
方式1:用游戏ID拼接唯一ID(更直观,推荐)
修改循环内删除按钮和表单的代码如下:
<!-- 修改删除按钮的提交目标ID --> <a href="javascript:{document.getElementById('upvote{{i.oyunlar.game_id}}').submit()}" class="btn-remove" title="Favorilerden Çıkar"><i class="icon-retweet"></i></a> <!-- 给每个表单设置和当前游戏绑定的唯一ID --> <form id="upvote{{i.oyunlar.game_id}}" method="POST" action="{% url 'favhome' i.oyunlar.game_id %}"> {% csrf_token %} </form>
方式2:用循环序号拼接唯一ID
如果担心游戏ID存在特殊字符不适合作为ID值,也可以用Django模板自带的循环序号变量forloop.counter:
<!-- 修改删除按钮的提交目标ID --> <a href="javascript:{document.getElementById('upvote{{forloop.counter}}').submit()}" class="btn-remove" title="Favorilerden Çıkar"><i class="icon-retweet"></i></a> <!-- 给每个表单设置和当前循环序号绑定的唯一ID --> <form id="upvote{{forloop.counter}}" method="POST" action="{% url 'favhome' i.oyunlar.game_id %}"> {% csrf_token %} </form>
内容的提问来源于stack exchange,提问作者cvsrt
相关产品推荐
相关产品推荐

