2014-07-05 71 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); 
} 
相關問題