2010-04-11 6 views
1

Je travaille sur l'ajout de téléchargement de fichier à mon application Web. J'utilise un iframe pour publier mon téléchargement. Lorsque mon script PHP traite le téléchargement, il écrit du JavaScript dans l'iframe. Ce JavaScript tente d'attacher une fonction au parent, cela fonctionne, mais quand cette fonction est réellement appelée, elle n'a pas la bonne portée. Voici le code que je attacher à la fenêtre parente:Association d'une fonction à la fenêtre parent à partir d'un iframe et obtention d'une portée correcte

parent.window.showPreview = function(coords) 
{ 
    if (parseInt(coords.w) > 0) 
    { 
     var rx = 200/coords.w; 
     var ry = 250/coords.h; 

     $('#preview').css({ 
      width: Math.round(rx * 400) + 'px', 
      height: Math.round(ry * 533) + 'px', 
      marginLeft: '-' + Math.round(rx * coords.x) + 'px', 
      marginTop: '-' + Math.round(ry * coords.y) + 'px' 
     }); 
    } 
} 

Lorsque cette fonction est exécuté, je reçois une erreur qui dit $ n'est pas défini. J'ai essayé d'ajouter en changeant l'appel de JQuery au parent. $ ('# Preview'). Css ..., mais alors il indique que le parent n'est pas défini. Des idées?

Répondre

1

Essayez ceci:

var p$ = parent.window.$; 
parent.window.showPreview = function(coords) { 
    if (parseInt(coords.w) > 0) 
    { 
     var rx = 200/coords.w; 
     var ry = 250/coords.h; 

     p$('#preview').css({ 
      width: Math.round(rx * 400) + 'px', 
      height: Math.round(ry * 533) + 'px', 
      marginLeft: '-' + Math.round(rx * coords.x) + 'px', 
      marginTop: '-' + Math.round(ry * coords.y) + 'px' 
     }); 
    } 
} 

Si vous effectuez une fonction pour la fenêtre parent, vous voulez probablement utiliser à la place jQuery de la fenêtre parente de la fenêtre enfant. Vous devez également vous assurer que la page parente possède sa propre copie de jQuery. (Si cela ne fonctionne pas, et vous êtes courageux, vous pouvez essayer de donner dynamiquement un!)

modifier

Voilà comment vous pouvez le faire avec une fermeture au lieu de $ global p:

parent.window.showPreview = (function(p$) { 
    return function(coords) { 
    // ... same as above 
    }; 
})(parent.window.$); 
+0

J'ai essayé ceci, il ne semble pas fonctionner. p $ n'est pas défini. – Ronald

+0

Votre page parent a-t-elle une balise ''

Questions connexes