2013-07-31 88 views
1

行35,就在警報之前,返回-1。我也試過$(this).index(),結果相同。這是它應該做的:單擊EN.gif應該返回4,然後grand_array_pics[4]應該給我en_array_pics並加載該陣列中的.gifs查找與已加載的陣列不同的陣列索引

$(document).ready(function() { 

    var main_pics = ["AN.gif", "BN.gif", "CN.gif", "DN.gif", "EN.gif", "GN.gif"]; 

    var starting_pics = ["AN.gif", "CN.gif", "EN.gif"]; 

    var an_array_pics = ["BN.gif", "EN.gif", "GN.gif", "AN.gif","DN.gif"]; 
    var bn_array_pics = ["CN.gif", "DN.gif", "GN.gif"]; 
    var cn_array_pics = ["DN.gif", "GN.gif", "AN.gif", "CN.gif"]; 
    var dn_array_pics = ["EN.gif", "AN.gif", "CN.gif"]; 
    var en_array_pics = ["GN.gif", "AN.gif", "CN.gif", "EN.gif"]; 
    var gn_array_pics = ["AN.gif", "CN.gif", "EN.gif", "GN.gif"]; 

    var grand_array_pics = [ 
     an_array_pics, 
     bn_array_pics, 
     cn_array_pics, 
     dn_array_pics, 
     en_array_pics, 
     gn_array_pics 
    ]; 

    var i = 0; 

    for (i = 0; i < starting_pics.length; i++) { 
     $("<img/>").attr("src", "images/" + starting_pics[i]).load(function() { 
      $(this).appendTo("#main"); 
      $(this).addClass("pics"); 
     }); 
    } 

    $("#main").on("click", ".pics", function() { 

     var j = $.inArray(this, main_pics); 
     alert(j); 

     $("#sidebar .pics").remove(); 
     $(this).clone().appendTo("#train"); 
     $(this).clone().appendTo("#sidebar"); 
     $("#main .pics").remove(); 

     var chosen_pics_array = grand_array_pics[j]; 
     var count = chosen_pics_array.length; 

     var k = 0; 

     for (k = 0; k < count; k++) { 
      $("<img/>").attr("src", "images/" + chosen_pics_array[k]).load(function() { 
       $(this).appendTo("#main"); 
       $(this).addClass("pics"); 
      }); 
     } 
    }); 
});  //end ready 

回答

1

this是DOM <img>元素,而main_pics是一個字符串數組。它永遠不會在那裏被發現。使用

var j = $.inArray(this.src.split("/").pop(), main_pics); 
1

試試這個。您需要獲得該文件的名稱和要傳遞的元素本身爲$.inArray

var j = $.inArray(this.src.substring(this.src.lastIndexOf('/')+1), main_pics); 
+0

[jsperf](http://jsperf.com/split-pop-vs-lastindexof),用於子/ lastIndexOf和分流/彈出 – kalley

+0

兩個工作之間的性能差異。我如何標記兩個答案? – jwelter

+0

你不能標記兩者。你可以同時使用它們,但不能將它們標記爲正確的。 – kalley