2013-10-08 2 views
0

Je dois récupérer les paramètres d'URL (que je peux faire avec succès) et en fonction d'un paramètre, décider quel iframe src remplir, puis avec d'autres paramètres remplir automatiquement le formulaire Cela est créé via le formulaire src. Le premier problème est que je ne peux pas empêcher la page d'entrer dans une boucle infinie. Il charge correctement et affiche le bon iframe, mais la boucle infinie (load) doit s'arrêter. Deuxièmement, je ne peux pas obtenir les autres paramètres pour remplir automatiquement les valeurs d'entrée.Comment charger dynamiquement une source iFrame et remplir automatiquement des formulaires d'entrée avec Javascript

Voici le code. J'espère que tu peux aider. Voici le code

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/2000/REC- xhtml1-200000126/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 
<head> 
<meta http-equiv="content-type" content="text/html; charset=UTF-8" /> 

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
<!-- Keep your jQuery up to date --> 

<script type="text/javascript"> 
var urlParams; 
(window.onpopstate = function() { 
var match, 
    pl  = /\+/g, // Regex for replacing addition symbol with a space 
    search = /([^&=]+)=?([^&]*)/g, 
    decode = function (s) { return decodeURIComponent(s.replace(pl, " ")); }, 
    query = window.location.search.substring(1); 

urlParams = {}; 
while (match = search.exec(query)) 
    urlParams[decode(match[1])] = decode(match[2]); 
})(); 


var test = urlParams["entry"]; 
var test2 = urlParams["test"]; 

function iframedirect(){ 
if (test=="sldk") { 
    document.getElementById("frame1").src = "http://na-sj09.marketo.com/lp/cochlearsandbox/UpgradeInterest_IFrameLandingPage.html"; 
    var f1 = frames['frame1'].document.forms['mktForm_1108']; 
    f1.elements['FirstName'].value = test; 
}else{ 
document.getElementById("frame1").src = "http://na-sj09.marketo.com/lp/cochlearsandbox/CAM-UpgradeInterestForm_iFrameLandingPage2ndOption.html"; 
} 
} 

</script> 
</head> 
<body id="bodyId" class="mktEditable" align="center" > 
<iframe id="frame1" src="" onload="iframedirect()" height="750px" width="620px" scrolling="no" frameborder="0" marginwidth="0"></iframe> 
</body> 
</html> 

Répondre

0

La boucle infinie est probablement causée par le résultat de la fonction iframedirect(). Il change le src de l'iframe et déclenche à nouveau et à nouveau l'événement onload.

Vous pouvez utiliser une variable pour indiquer si iframe a été chargé par iframedirect().

var test = urlParams["entry"]; 
var test2 = urlParams["test"]; 
var isLoadedByIFrameDirect = false; 
function iframedirect() { 
    if(!isLoadedByIFrameDirect) { 
     if (test=="sldk") { 
      document.getElementById("frame1").src = "url1"; 
      var f1 = frames['frame1'].document.forms['mktForm_1108']; 
      f1.elements['FirstName'].value = test; 
     }else{ 
      document.getElementById("frame1").src = "url2"; 
     } 
     isLoadedByIFrameDirect = true; 
    } 

}

+0

La mise en œuvre cela n'a pas empêché la boucle infinie. Merci pour l'idée. Vous aviez raison de me rendre compte que j'avais une charge d'auto-référence. Je devais l'enlever, plutôt que d'essayer de l'arrêter. Merci d'avoir réellement mis votre suggestion au code qui peut être facilement copié et collé. Donc peu de gens font ça. Les novices en profitent vraiment. J'ai résolu le problème et je vais le poster maintenant. –

+0

Ravi de vous entendre résolu le problème! – Gnagy

0

Bon, alors le problème est que je créé un événement onload-sel freferencing. Mauvaise idée. Pour résoudre le problème, j'avais besoin de supprimer l'onload de l'élément iframe. J'ai essayé de le mettre dans le corps avant sans chance. Mais je pourrais avoir foiré, donc n'ignorez pas cette option si vous avez une situation similaire. J'ai décidé de le faire avec Javascript juste après la fonction. Si vous êtes un novice, la différence entre Javascript onload et HTML onload se trouve ici

W3Schools onload Event

Je n'ai pas encore résolu la partie « sous forme de remplissage automatique iframe à partir de paramètres url » de ce problème. Je ferai un commentaire supplémentaire à cette réponse une fois que je l'aurai compris.

Dans tous les cas, voici le code

function iframedirect() { 
    if(!isLoadedByIFrameDirect) { 
     if (test=="sldk") { 
      document.getElementById("frame1").src = "http://na- sj09.marketo.com/lp/cochlearsandbox/UpgradeInterest_IFrameLandingPage.html"; 
      var f1 = frames['frame1'].document.forms['mktForm_1108']; 
      f1.elements['FirstName'].value = test; 
     }else{ 
      document.getElementById("frame1").src = "http://na-sj09.marketo.com/lp/cochlearsandbox/CAM-UpgradeInterestForm_iFrameLandingPage2ndOption.html"; 
     } 
     isLoadedByIFrameDirect = true; 
    } 
} 
window.onload = iframedirect; 
Questions connexes