Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript如何计算多个链接上的唯一点击次数_Javascript_Hyperlink_Count_Unique - Fatal编程技术网

Javascript如何计算多个链接上的唯一点击次数

Javascript如何计算多个链接上的唯一点击次数,javascript,hyperlink,count,unique,Javascript,Hyperlink,Count,Unique,例如,如果他们说在页面上有10次独特的点击,我有以下代码,每一次点击将计算一次: function modify_qty(val) { var qty = document.getElementById('qty').value; var new_qty = parseInt(qty,10) + val; if (new_qty < 0) { new_qty = 0; } document.getElementById('qty').value = new_qty; retur

例如,如果他们说在页面上有10次独特的点击,我有以下代码,每一次点击将计算一次:

function modify_qty(val) {
var qty = document.getElementById('qty').value;
var new_qty = parseInt(qty,10) + val;

if (new_qty < 0) {
    new_qty = 0;
}

document.getElementById('qty').value = new_qty;
return new_qty;
}

<a onClick="modify_qty(1)">link</a>
功能修改数量(val){
var qty=document.getElementById('qty')。值;
var new_qty=parseInt(数量,10)+val;
如果(新数量<0){
新增数量=0;
}
document.getElementById('qty')。值=新数量;
返回新数量;
}
链接

但问题是,如果我点击同一个链接,它会一次又一次地计算。我想要的是,例如,页面上有10个链接,最大计数将为10,并且每个链接只能单击一次。

您可以在单击后禁用按钮,这样,您的每个唯一按钮将只单击一次 因此,您将获得所需的输出


或者,您可以将一个类分配给单击按钮(如果您不想禁用它的话)

通过闭包变量跟踪已单击的链接,并在已单击链接时从函数返回。这也可以通过自删除事件侦听器来完成

<a href="#" id="1" onClick="modify_qty(1, this.id)">link 1</a>
<a href="#" id="2" onClick="modify_qty(1, this.id)">link 2</a>
<a href="#" id="3" onClick="modify_qty(1, this.id)">link 3</a>
<a href="#" id="4" onClick="modify_qty(1, this.id)">link 4</a>
<a href="#" id="5" onClick="modify_qty(1, this.id)">link 5</a>


modify_qty = (function(){
    var clickedLinks = [];
    return function(val, linkId) {
        // check if link has been clicked    
        if(clickedLinks.indexOf(linkId) > -1){
            return;
        }
        // add link to clicked array and process
        clickedLinks.push(linkId);

        var qty = Math.floor(Math.random()*11);
        var new_qty = parseInt(qty,10) + val;

        if (new_qty < 0) {
            new_qty = 0;
        }

        lastVal = val;
        return new_qty;
    };
})();

修改数量=(函数(){
var clickedLinks=[];
返回函数(val,linkId){
//检查是否已单击链接
如果(clickedLinks.indexOf(linkId)>-1){
回来
}
//添加链接到单击的数组和进程
单击链接。推送(linkId);
变量数量=数学地板(数学随机()*11);
var new_qty=parseInt(数量,10)+val;
如果(新数量<0){
新增数量=0;
}
lastVal=val;
返回新数量;
};
})();

演示小提琴:

这似乎不起作用。使用该代码,它不再计算点击次数。@Hasen-缺少一个“}”,请检查更新的版本。现在,单击时,它会计算一个链接,不再计算,但只能单击一个链接。也无法单击所有其他链接。它们都是不同的唯一链接,但当然它们都有相同的属性:onClick=“modify\u qty(1);在url中……也许这就是问题所在?它们是否都将1传递给函数?不同的值应该可以工作。这会阻止它以相同的值连续运行两次。@HasenI不知道它们是否都将1传递给函数,但它仍然停留在1。我无法传递不同的值,因为我只想计算单击次数,所以每个单击次数都应该为1.我觉得这几乎奏效了。。。