2014-07-05 88 views
-1

我试图检查哪个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; 
    } 
} 
+0

因为你忘记了'if(this == childs [c])的花括号'; 'break'总是会引发火灾。 – user41047

+0

是的,我注意到,谢谢我忘记了配件。 – Nicco

回答

0

的问题是在这里:

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

您使用元素c解析矢量,但您增量为i。更换ci或周围的其他方法

而且加括号if语句

0

由于您使用jQuery,使用jQuery :) 使其100%这将工作:)

的jQuery代码:

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

我不使用Jquery。我做了一个美元符号选择器。 – Nicco

0

首先更换i++c++则包括大括号

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

请说明您的代码的作用以及它如何回答问题。如果你得到一个代码片段作为答案,你可能不知道如何处理它。回答应该给OP和未来访问者指导如何调试和解决他们的问题。指出你的代码背后的想法,对于理解这个问题以及应用或修改你的解决方案有很大的帮助。 – Palec

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); 
} 
相关问题