2009-03-12 8 views
0

J'ai un tas d'images sur ma page ASP.NET comme ceci:JQuery .each fonction

for (int i = 0; i < 3; i++) 
{ 
    Image image = new Image(); 
    image.ID = "UpdateStatus"; 
    image.CssClass = "imageCss"; 
    image.ImageUrl = "Bump.GIF"; 
    this.Controls.Add(image); 
} 

Je veux faire une boucle à travers chaque image.

Pourquoi cela ne fonctionne-t-il pas? c'est-à-dire que la "Fonction 1" est sortie mais que la "Fonction 2" n'est pas

$(document.body).click(function() { 
    console.log('Function 1'); 

    $('imageCss').each(function(){ 
     console.log('Function 2'); 
    }); 
}); 

Pourquoi cela ne fonctionne-t-il pas? c'est-à-dire que "Fonction 1" est sortie et "Fonction 2" sortie une fois. Pourquoi pas 3 fois?

$(document.body).click(function() { 
    console.log('Function 1'); 

    $(''#UpdateStatus'').each(function(){ 
     console.log('Function 2'); 
    }); 
}); 

Cela fonctionne bien MAIS je ne peux pas accéder à 'ceci', c'est NULL. Je dois être capable de référencer l'image actuelle.

$(document.body).click(function() { 
    console.log('Function 1'); 

    $.each('#UpdateStatus', function() { //Or when I use 'imageCss' 
     console.log('Function 2');   
     console.log(this); 
    }); 
}); 

Répondre

10

(1) Votre appel jQuery $('imageCss') n'est pas un sélecteur valide. Vous devez préfixer le nom de la classe avec '.' pour indiquer que vous souhaitez sélectionner des éléments avec la classe "imageCss":

$('.imageCss')

(2) ID doit être unique. Lorsque vous définissez Control.ID = "foo" sur le serveur dans ASP.NET, cela définit le côté serveur ID du contrôle. L'ID côté client généré dans le code HTML sera une chaîne unique, longue et laide, telle que ctl00_ctl01_pnlMain_foo1. Votre meilleure option est d'utiliser des sélecteurs de classe. Vous pouvez appliquer plusieurs classes à un seul élément en utilisant un espace pour les séparer:

myImage.CssClass = "image otherclass"; 

Les deux $('.image') et $('.otherclass') seront correctement sélectionnez l'élément.

(3) this n'existe pas à cause de closures. Les fonctions sont exécutées dans le contexte de l'objet qui appelle la fonction, donc this sera cet objet.

Ou, dans votre cas, il ne semble pas vraiment que votre fonction s'exécute dans le contexte d'un objet, donc je ne suis pas sûr de ce que vous attendez de this.

0

pour faire référence à l'image actuelle faire quelque chose comme:

$.each('#UpdateStatus', function(i, val) { 
    console.log('Function 2');   
    console.log(val); 
});