jQuery iframe load() de l'événement?
Personne ne sait si il ya une telle chose?
J'ai une iframe qui est en cours d'insertion avec $.ajax()
et je tiens à faire quelques trucs après le contenu de l'iframe sont complètement chargé:
....
success: function(html){ //<-- html is the IFRAME (#theiframe)
$(this).html(html); //$(this) is the container element
$(this).show();
$('#theiframe').load(function(){
alert('loaded!');
}
....
il fonctionne, mais je vois l'IFRAME est chargé à deux reprises (l'alerte montre également deux fois).
- Essayez de définir le src de l'iframe avant d'ajouter à la DOM. Cela devrait permettre d'éviter l'événement load de tirer deux fois.
Vous devez vous connecter pour publier un commentaire.
Si possible, vous seriez mieux de la manipulation de la
load
événement à l'intérieur de l'iframe du document et l'appel à une fonction dans le document contenant. Cela a l'avantage de travailler dans tous les navigateurs et de n'exécuter qu'une seule fois.Dans le document principal:
Dans l'iframe document:
jQuery(document).ready
fonction du document parent?ready()
fonction, ou explicitement à l'affecter en tant que propriété dewindow
à l'intérieur de votreready()
fonction. Par exemple:$(document).ready(function() { window.iframeLoaded = function() { alert("Load"); }; /* Other stuff here */ })
;utilisation iframe événement onload
$('#theiframe').on("load",function())
.});
🙂Le long des lignes de Tim de Down réponse mais l'exploitation
jQuery
(mentionné par l'OP) et peu d'accouplement de la page qui les contient et les iframe, vous pouvez effectuer les opérations suivantes:Dans l'iframe:
Dans la page qui les contient:
L'iframe déclenche un événement sur l' (potentiellement) parent de la fenêtre de document - veuillez noter que le document parent a besoin d'un jQuery instance de lui-même pour que cela fonctionne. Puis, dans la fenêtre parent de vous attacher un gestionnaire de réagir à cet événement.
Cette solution a l'avantage de ne pas casser lorsque la page qui les contient ne contient pas la charge prévue gestionnaire. Plus généralement, il ne devrait pas être la préoccupation de l'iframe à connaître son environnement.
Veuillez noter que nous utilisons le DOM prêt événement pour déclencher l'événement - qui doit être adapté à la plupart des cas d'utilisation. Si elle ne l'est pas, il suffit de fixer l'événement déclencheur de la ligne de la fenêtre de l'événement load de la sorte:
C'est le même comportement que j'ai vu: de l'iframe
load()
va tirer le premier sur un vide iframe, puis la deuxième fois lorsque votre page est chargée.Edit: Hmm, intéressant. Vous pourriez incrémenter un compteur dans votre gestionnaire d'événements, et a) ignorer la première
load
événement, ou b) d'ignorer les doublons deload
événement.alert($(this).attr('src'));
à l'intérieur de la fonction de charge-je obtenir la même valeur à deux fois ...Vous pouvez utiliser le jquery Contenu méthode pour obtenir le contenu de l'iframe.
Si vous voulez qu'il soit plus générique et indépendante, vous pouvez utiliser un cookie. Iframe contenu peut placer un cookie. Avec jquery.cookie et un timer (ou dans ce cas, javascript timer), vous pouvez vérifier si le cookie est défini chaque seconde.
Sans code iframe + animer: