2009-11-04 4 views
1

Cela peut sembler évident, mais je ne le trouve pas. Lorsque vous utilisez redimensionnable, je veux enregistrer la nouvelle largeur de l'image, mais comment puis-je accéder à l'attribut ID de l'image que je viens de redimensionner? Ceci est mon code:jQuery redimensionnable(), accès à l'objet original

$('img.article_image').resizable({ 
    aspectRatio: true, 
    handles: "se", 
    stop: function(event, ui){ 
     // Here I want to access the ID attribute 
     // of the img.article_image I am resizing 
}}); 

Ainsi, l'objet a ui ui.helper, que je ne peux pas utiliser. C'est à dire. ui.helper.attr ("id") ou $ (ui.helper) .attr ("id") sont tous deux indéfinis. Je ne peux pas utiliser $ (this) .attr ("id") non plus, mais je CAN utiliser $ (this) .width() pour voir la nouvelle largeur, donc c'est très étrange.

Qu'est-ce que je fais mal? Lors de l'utilisation de draggable(), il semble que je puisse accéder à $ (this) de la bonne manière, mais pas avec redimensionnable ... Des suggestions?

Répondre

4

le paramètre ui détient l'élément redimensionnée

stop: function(event, ui){ 
alert(ui.originalElement[0].id); 
} 
+0

C'était (semi-) correct, cela va chercher l'ID correct: $(ui.originalElement[0]).attr("id") Sandman

+0

Si cela est destiné à être utilisé, quelqu'un devrait l'ajouter à la documentation sur le site de l'interface jQuery. Je ne suis pas sûr si je me sentirais à l'aise d'utiliser une propriété non documentée car elle pourrait disparaître dans une future version – joshperry

+2

@Sandman - en fait juste 'ui.originalElement.attr (" id ")' suffirait. La notation 'ui.originalElement [0]' est utilisée pour extraire un objet DOM de son wrapper jQuery. – joshperry

0

Dans votre cas, vous pouvez simplement obtenir l'ID à l'intérieur de stop rappel avec ce code:

$('img.article_image').attr('id'); 

Ce sera toutefois dupliquer le sélecteur, mais des paramètres transmis par stop fonction de rappel n'a pas l'enregistrement de l'original objet qui a été redimensionné.

+0

Cela ne fonctionnera pas s'il y a plusieurs images avec le '.article_image' classe – joshperry

1

Je n'ai pas utilisé le plugin redimensionnable, mais s'il suit les mêmes directives que les événements jQuery intégrés, alors this sera une référence à l'élément DOM affecté. Ainsi, vous pouvez obtenir un objet enveloppé jQuery comme ceci:

$('img.article_image').resizable({ 
    aspectRatio: true, 
    handles: "se", 
    stop: function(event, ui){ 
     var img = $(this); 
     var id = img.attr("id"); 
}});