使用数组长度作为变量

时间:2014-09-19 17:45:03

标签: javascript arrays

我的问题是,如果我可以使用数组的长度作为整数值,这里是代码

var contador = 0;
    var bannercount = document.getElementsByClassName("bannerlink");
    var linkcount = bannercount.length;
    var clickcount = new Array(linkcount);
    for (var i = 0; i < clickcount.length; i++)
        clickcount[i] = 0;
    function contarClick(id) {
        contador = clickcount[id];
        contador++;
        clickcount[id] = contador;
        contador = 0;
        //var imagen = $(identificador + 'img');
        //var enlace = document.getElementById(imagen).getAttribute('href');
        //alert('tomar conteo:' + contador + ' tomar url' + enlace);
        alert("Total de Enlaces en Página: " + linkcount + "\nConteo de Click: " + clickcount[id] + "\nIdentificador de este Enlace: " + id + "\nTamaño del Arreglo: " + clickcount.length);
    }

我知道它有点混乱而难以理解,因为它是西班牙语,所以我会解释它:bannercount变量获取我的HTML上有&#39; bannerlink&#39;的所有元素。 class,如果我使用alert(bannerlink.length),它会显示一条包含元素数量的消息,但我无法在其他代码上使用它。

我想要的是linkcount变量获取bannercount变量的长度并将其设置为clickcount数组的大小。如果我将linkcount设置为数字,我的其余功能完全正常,但是当我插入bannercount.length时它不起作用。我不明白为什么,因为当我在其他阵列上使用它时,它确实有效。

这个脚本应该计算我的href标签的点击次数,具体取决于我为它们设置的类,如果我手动设置数组大小但我希望它自动化,任何建议,它确实可以正常工作吗? / p>

两小时后编辑,根据您的建议,即使它不能很好地工作,它也有所改进,但点击次数没有正确递增,这是我的新代码,感谢您的所有答案。 href的计数器应该单独启动,它用于记录每个href的点击量,然后我将发送到我的SQL数据库(上帝知道如何因为javascript无法连接到mySQL但我会想到一些东西)。它也会影响我在ASP.NET上运行吗?

<script type="text/javascript">
    var bannercount = document.getElementsByClassName("bannerlink");
    var clickcount = [];
    clickcount.length = bannercount.length;
    function contarClick(id) {
        clickcount[id] = clickcount ? clickcount + 1 : 1;
        alert("Total de Enlaces en Página: " + bannercount.length + "\nConteo de Click: " + clickcount[id] + "\nIdentificador de este Enlace: " + id + "\nTamaño del Arreglo: " + clickcount.length);
    }
</script>

2 个答案:

答案 0 :(得分:3)

您似乎只希望clickcount充满0。

删除此:

var clickcount = new Array(linkcount);
for (var i = 0; i < clickcount.length; i++)
    clickcount[i] = 0;

并替换为:

var clickcount = [];
for(var i = 0; i < linkcount; i++){
    clickcount.push(0);
}

答案 1 :(得分:0)

另一种选择是首先不要将数组设置为零。你可以这样做:

var clickcount = [];

然后这个:

function contarClick(id) {
    clickcount[id] = clickcount[id] ? clickcount[id] + 1 : 1;
}

第一次点击clickcount[id]将是未定义的,这是假的,所以它将被分配1.所有其他情况下它将增加1.

此外,您的原始代码实际上没有任何问题:

var bannercount = document.getElementsByClassName("bannerlink");
var linkcount = bannercount.length;
var clickcount = new Array(linkcount);
for (var i = 0; i < clickcount.length; i++)
    clickcount[i] = 0;

alert(clickcount);
<a class="bannerlink">link1</a>

<a class="bannerlink">link2</a>

<a class="bannerlink">link3</a>

<a class="bannerlink">link4</a>
如果您运行上述代码段,则会提醒0,0,0,0这正是您所期望的。

以下是使用我的建议的一个工作示例:

var bannercount = document.getElementsByClassName("bannerlink");
var linkcount = bannercount.length;
var clickcount = []

function contarClick(id) {
    clickcount[id] = clickcount[id] ? clickcount[id] + 1 : 1;
  alert(clickcount);
}

var links = document.getElementsByClassName("bannerlink");

for (var i = 0 ; i < links.length; i++) {
  links[i].addEventListener("click", function() {
      contarClick(this.id);
    });
  }
<a class="bannerlink" id="0">link1</a>

<a class="bannerlink" id="1">link2</a>

<a class="bannerlink" id="2">link3</a>

<a class="bannerlink" id="3">link4</a>