2010-12-06 12 views
1

Sie sehen, ich versuche einige Elemente zu manipulieren, wenn sie ihren Index vergleichen. Das Problem ist mein Index ist nicht mit int-Wert zugewiesen, bleibt aber undefiniert..index() Problem

$(function(){ 
    var i; 
    $("a").click 
    (
    function() 
    { 
     i = $("a").index(this);      
     $(".textholder div:eq(i)").slideUp(); 
     $(".textholder div:eq(i+1)").css('top', '-210px'); 
     return false; 
     } 
); 
    alert(i); 
}); 

Ich bin auch offen für irgendwelche Bemerkungen über meine Syntax und Algorithmus!

Irgendwelche Vorschläge? Vielen Dank

+1

Könnten Sie Ihr Markup auch posten? Vielleicht eine Demo auf einer kollaborativen Site wie [JS Fiddle] (http://jsfiddle.net/) oder [JS Bin] (http://jsbin.com/)? –

+2

Ich bin kein jQuery-Guru, aber ich würde versuchen, die index() -Funktion '$ (this)' anstelle von 'this' zu übergeben (ich denke, es erfordert ein jQuery-Objekt). Ich bin mir nicht sicher, also poste dies als Kommentar. [edit] OK, ich habe mich geirrt: D – mingos

+2

@mingos, wir alle leben und lernen, +1 für die Bearbeitung um 'fess up, anstatt nur den Kommentar zu löschen =) –

Antwort

4

Sie Alarm i, bevor irgendetwas angeklickt wird. Wenn Sie auf etwas klicken, ist das einzige Bit, das ausgeführt wird, von der Zeile function() bis zur Zeile return false;. Es ist also kein Wunder, dass i nicht definiert ist.

Wenn Sie den Wert von i sehen wollen, wenn es gesetzt ist, bewegen Sie die alert(i) Linie (oder noch besser, ändern Sie ihn auf console.log()) unter die i = $("a").index(this); Linie.

+0

Ich hatte das nicht erwischt, +1, gut entdeckt =) –

+1

@David - es gibt nur * so * viele falsche Dinge, die du an einem Stück Code gleichzeitig entdecken kannst! – Skilldrick

+0

10x Jetzt gibt es einen Wert zurück, aber mein divs bewegt sich nicht, aber das ist eine ganz andere Sache :) – kidwon

5

Ich bin nicht sicher, dass es das einzige Problem ist, aber:

$(".textholder div:eq(i)").slideUp(); 
$(".textholder div:eq(i+1)").css('top', '-210px'); 

werden soll:

$(".textholder div:eq(" + i + ")").slideUp(); 
$(".textholder div:eq(" + i+1 + ")").css('top', '-210px'); 

Andernfalls wird die i wird nicht ausgewertet.

2

Die i Variable wird nicht interpoliert innerhalb der Zeichenfolge, bringen Sie es nach draußen.

$(function(){ 
    var i; 
    $("a").click 
    (
    function() 
    { 
     i = $("a").index(this);      
     $(".textholder div:eq(" + i + ")").slideUp(); 
     $(".textholder div:eq(" + (i+1) + ")").css('top', '-210px'); 
     return false; 
     } 
); 
    alert(i); 
});