jquery - 请求仅适用于循环中的第一项?

标签 jquery python ajax django

我已经编写了一个基本脚本,用于检测提交到我的网站(如 reddit)的链接的点赞按钮推送,在我的 View 中实例化一个函数并返回更新的点赞计数。代码的每一部分都工作正常,除了它只适用于模板中 for 循环中的第一项。我做错了什么,它不能捕获超过第一个元素?

我使用 jQuery 检测按钮按下的脚本如下所示:

<script>
$(document).ready(function() {
    $('#likes').click(function(){
        var link_id;
        link_id = $(this).attr("data-linkset_id")
        $.get('/uplink/', {linkset_id: link_id}, function(data){
            $('#vote_value').html(data);
            $('#likes').hide();
        });
    });
});
</script>

这是带有实际按钮的有问题的循环:

{% for link in linkset %}
{{link.url}}
<div id="vote_value">{{link.linklikes}}</div>
<button id ="likes" data-linkset_id="{{link.id}}" class="btn btn-mini btn-primary" type="button">like</button>
{% endfor %}

下面是我的 views.py 中的函数,它接受一个新链接对象并更改它的点赞数,然后返回更新后的整数:

def uplink(request):
    context = RequestContext(request)
    link_id = None
        if request.method == 'GET':
        link_id = request.GET['linkset_id']

    likes = 0
    if link_id:
        thelink = newlink.objects.get(id=int(link_id))
        if thelink:
            likes = thelink.linklikes + 1
            thelink.linklikes = likes
            thelink.save()

    return HttpResponse(likes)

非常感谢对此的任何帮助。

最佳答案

id 在页面上必须是唯一的。只有一个元素可以有特定的 id。将 id 属性和选择器更改为类或数据属性。

$(document).ready(function() {
    $('[data-role=like_container]').on('click', '[data-action=like_button]', function(e){
        var $like_container = $(e.delegateTarget);
        var $like_button = $(e.currentTarget);
        var $vote_value = $like_container.find('[data-role=vote_value]');
        var link_id = $like_button.data("linkset_id");
        $.get('/uplink/', {linkset_id: link_id}, function(uplink_response){
            $vote_value.html(uplink_response);
            $like_button.hide();
        });
    });
});

{% for link in linkset %}
<div data-role="like_container">
  {{link.url}}
  <div data-role="vote_value">{{link.linklikes}}</div>
  <button data-action="like_button" data-linkset_id="{{link.id}}" class="btn btn-mini btn-primary" type="button">like</button>
</div>
{% endfor %}

关于jquery - 请求仅适用于循环中的第一项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29834888/

相关文章:

javascript - 如何从异步调用返回响应?

javascript - 在 Jquery Ajax 中访问多维 PHP 数组

javascript - 根据输入 keydown 上的下拉菜单更改,应完成某些功能

python - sqlite3。值错误: operation parameter must be str or unicode

python - 将 3D 切片绘制为热图

javascript - 输入类型编号应从带向上箭头的最小值和带向下箭头的最大值重新开始

python - 如何在 Python 程序中使用 Jinja2 模板?

javascript - 即使 JSON 数组包含 "undefined",实时搜索也会返回 "objects"

javascript - jQuery version 1.5 - ajax - &lt;script&gt; 标签时间戳问题

javascript - 为什么 jquery removeClass to 按钮在ajax之后仍然可以正常工作?