javascript - 我怎样才能使这个点击计数器正常工作?

标签 javascript jquery html

我正在制作一个 Marvel API 项目。我添加了一个“喜欢”按钮,这样它就可以计算喜欢的次数,但是每次我单击任何“喜欢”按钮时,唯一的计数器添加数字是第一个。谁能告诉我如何正确执行此操作?

enter image description here

问题是因为 ID 是由 for 生成的,所以我该如何解决这个问题?

这是我的 JS 代码(在我项目的 js 文件中):

success: function(data)
{
    footer.innerHTML = data.attributionHTML;
    var string = "";
    string += "<div class='row'>";

    for (var i = 0; i < data.data.results.length; i++)
    {
        var element = data.data.results[i];                   
        string += '<div class="col-md-3" align="center">';                 
        string += "<img src='" + element.thumbnail.path + "/portrait_fantastic." + element.thumbnail.extension + "'/>";                       
        string += '<button class="btn btn-success" onClick="testo()"><i class="fas fa-thumbs-up"></i> | <a id="likes">0</a></button>';
        string += "<h3>" + element.title + "</h3>";                                                  
        string += "</div>";

        if ((i + 1) % 4 == 0) 
        {
            string += "</div>";
            string += "<div class='row'>";
        }
    }

    marvelContainer.innerHTML = string;
}

这是我的 onclick 函数(它在我的 html 文件中,因为它对我的 js 文件不起作用)

<script>
var likes=0;
function testo()
{
    likes += 1;
    document.getElementById("likes").innerHTML = likes;
}
</script>

最佳答案

那是因为您所有的按钮都是使用相同的 id="likes" 生成的,然后您正在使用 document.getElementById("likes").innerHTML = likes 更改 HTML ; 为了让您的代码正常工作,您需要使用不同的方法,可能会向您的按钮添加一个 data-* 属性,然后使用 .getAttribute('data-id-something' ).innerHTML 而不是 document.getElementById("likes").innerHTML。 或者在这种情况下更好,你可以给按钮一个类名并用以下方法处理它:document.getElementsByClassName("like-btn")

您可以检查此示例中的最后一个选项:

 	var init = function(data){
                var string ="";
                string += "<div class='row'>";
                for(var i = 0; i<4; i++)
                {
                    // var element = data.data.results[i];                   
                    string += '<div class="col-md-3" align="center">';                 
                    string += "<img src='/portrait_fantastic.jgeg'/>";                       
                    string += '<button class="btn btn-success" onClick="testo('+i+')"><i class="fas fa-thumbs-up"></i> | <span class="like-btn">0</span></button>';
                    string += "<h3>Element title</h3>";                                                  
                    string += "</div>";                   
                    if((i+1) % 4 ==0) 
                    {
                        string += "</div>";
                        string += "<div class='row'>";
                    }
                }
                document.getElementById("marvelContainer").innerHTML = string;
            }
            init();
<script>
var likes=0;
function testo(id) {      
        var btn = document.getElementsByClassName("like-btn");
        likes = parseFloat(btn[id].innerHTML);
        likes += 1;
        btn[id].innerHTML = likes;
    }
</script>

<div id="marvelContainer"></div>

希望对你有帮助...

关于javascript - 我怎样才能使这个点击计数器正常工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55424661/

相关文章:

javascript - jquery nextall 首先获取 id

javascript - RabbitMQ for NodeJS with Express 路由

php - Jquery ajax 从 php mysql 检索文本(数字)

asp.net - 转义字符和错误 500

jquery - 带有 jquery 代码的脚本 block 应该放置在 ASP.NET MVC 母版页上的什么位置?

javascript - 如何使用 JQuery 来选择单选按钮的选中值?

javascript - 如何防止css div popup跳回页面顶部

jquery - 如何在最接近的之前获得DIV

javascript - jquery ui 输出 : function not triggering

javascript - Jquery数据表删除和添加新行