按钮更新第一个元素的文本而不是选定元素

Posted

技术标签:

【中文标题】按钮更新第一个元素的文本而不是选定元素【英文标题】:Button updates text of first element instead of selected element 【发布时间】:2015-08-31 15:59:51 【问题描述】:

当我选择“喜欢”按钮时,按钮会正确更新。但是,“喜欢计数”仅更新第一张图像的计数,而不是我选择的图像。

有什么想法可以像按钮一样只更新所选图像的点赞数吗?

提前谢谢你!

html

% for photo in photos %
    <img src=" photo.get_photo_url " />
    <input class="like_btn" photo=" photo.pk " value="% if user.username in photo.get_likers %Liked% else %Like% endif %" type="button" />
    <a href="#" id="like_count">0</a>
% endfor %

jquery:

$('.like_btn').click(function(e)
    e.preventDefault();
    var $like_btn = $(this);
    $.ajax(
        type: "POST",
        url: "% url 'like_ajax' %",
        data: 
            "photo_pk": $(this).attr("photo"),
            csrfmiddlewaretoken: " csrf_token ",
        ,
        dataType: "json",
        success: function(data) 
            if (data.viewer_has_liked) 
                $like_btn.val("Liked");
                $('#like_count').html(data.like_count);
             else 
                $like_btn.val("Like");
                $('#like_count').html(data.like_count);
            
        ,
        error: function (rs, e) 
        
    );
);

【问题讨论】:

【参考方案1】:

每张照片的点赞数都相同:

% for photo in photos %
    <a href="#" id="like_count">0</a>
% endfor %

因此,只有第一个被识别为'真实'#like_count

由于您有照片的主键,您可以通过合并 photo.pk 来区分 id:

<a href="#" id="like_count- photo.pk ">0</a>

编辑:

与其更改每个点赞数的 id,不如将其变成一个类并调整 javascript。尝试以下更改:

在 HTML 中,改变这个:

<a href="#" id="like_count">0</a>`

到这里:

<a href="#" class="like_count">0</a>

在 JavaScript 中,改变这个:

if (data.viewer_has_liked) 
    $like_btn.val("Liked");
    $('#like_count').html(data.like_count);
 else 
    $like_btn.val("Like");
    $('#like_count').html(data.like_count);

到这里:

if (data.viewer_has_liked) 
    $like_btn.val("Liked");
    $like_btn.next('.like_count').html(data.like_count);
 else 
    $like_btn.val("Like");
    $like_btn.next('.like_count').html(data.like_count);

此更改将使类似计数成为一个类 (.like_count)。然后在 JavaScript 中,您将选择与.like_count 匹配的下一个选择器(在$like_btn 之后)。

【讨论】:

我还需要更新 jQuery 吗?如果有,怎么做? @jape:正在更新我的答案以做到这一点! 5 分钟或更短时间或您的 $$ 返回【参考方案2】:

循环中的&lt;a&gt;标签有相同的id是冲突的,所以在&lt;a&gt;标签属性中为jquery选择器设置一个唯一索引

【讨论】:

如果不介意的话,可以举个例子让我比较一下吗? @jape: &lt;a href="#" id="like_count- photo.pk "&gt;0&lt;/a&gt; mfcovington 的评论是可用的,你也有另一个想法来获取&lt;a&gt;$like_btn.parent().chlidren().find('a')

以上是关于按钮更新第一个元素的文本而不是选定元素的主要内容,如果未能解决你的问题,请参考以下文章

知道为啥这个函数正在写入/更新表中的第一个单元格而不是 PFQueryTableViewController 中选定的单元格吗?

禁用选定元素的突出显示

样式化除第一个选定元素之外的所有元素? [复制]

1个div内的2个元素,我希望另一个元素与第一个元素一起缩放

如何获取第一个 HTML 元素的文本

如何在文本框中获取 Enter 键以触发功能而不是第一个/默认按钮