检查已单击的列表元素

时间:2014-07-05 11:14:28

标签: javascript

我正在尝试检查在无序列表中单击了哪个li。只有第一个li似乎有效,因为它会提醒0但li的其余部分不会响应警报。 Nodelist应包含元素0,1,2。仅限原始javascript。

HTML

<ul class="slideshow-buttons">
  <li></li>
  <li></li>
  <li></li>
</ul>

Javasript

var $ = function (selector) {
    return document.querySelector(selector);
};

var knappar = $('.slideshow-buttons').getElementsByTagName('li');

for (var i = 0; i < knappar.length; i++) {
    var knapp = knappar[i];
    knapp.onclick = knappTryck;
}

问题似乎在knappTryck

function knappTryck(){

    var childs = $('.slideshow-buttons').getElementsByTagName("li");
    for (var c = 0; c < childs.length; i++) {
        if (this == childs[c])
        alert (c);
        break;
    }
}

4 个答案:

答案 0 :(得分:0)

问题在于:

for (var c = 0; c < childs.length; i++) {

使用元素c来解析向量,但增加i。将c替换为i或以其他方式替换

还要在if语句中添加大括号

答案 1 :(得分:0)

由于您使用的是jQuery,因此使用jQuery将其设为100%:) 这将有效:)

jQuery代码:

$(document).ready(function() {
$(".slideshow-buttons li").live("click", function() {
    alert($(this).index());
});
});

答案 2 :(得分:0)

首先用i++替换c++,然后包括花括号

   for (var c = 0; c < childs.length; *c*++) {
        if (this == childs[c])*{*
            alert (c);
            break;
        *}*
    }

答案 3 :(得分:0)

您可以使用闭包。

for (var i = 0; i < knappar.length; i++) {
    var knapp = knappar[i];
    knapp.onclick = (function(i){
        return function(){
            console.log(i, this); // this is the li you clicked, and i is the index
        }
    })(i);
}