2010-02-09 6 views
0

Je charge le code html & dynamiquement depuis le webservice. J'utilise la méthode de mise à jour du prototype:Dynamic javascript - onclick non visible

placeholder.update(result.Static.html); // which also include javascript code 

Immédiatement après i code chargé, tout fonctionne bien:

ProRegResetForm(); 
alert('reset done'); 

cependant, du contrôle déclarés comme

<a href="javascript://" onclick="javascript:ProRegResetForm();" class="au">Reset</a> 

J'ai erreur: ProRegResetForm est non défini.

CODE D'ESSAI SIMPLIFIE (qui ne fonctionnait pas):

<script type="text/javascript"> 

    var defkeyword_ZipCode = 'Zip Code'; 

</script> 
<a href="javascript://" onclick="alert(defkeyword_ZipCode);">test link</a> 
+0

Le problème est le plus probable dans une section de code que vous ne montrez pas. Il est difficile de dire si quelque chose arrive à la fonction entre votre appel de test et l'événement click. Avez-vous essayé de changer l'événement click en une fonction différente (éventuellement "alert") pour vous assurer que l'événement click se déclenche correctement? –

+2

Vous n'avez JAMAIS besoin de javascript: dans un onclick. Cela ne résoudra pas votre problème. –

+0

Il semble que toutes les variables et fonctions, définies dans le script à venir, vivent dans un espace de noms séparé. – st78

Répondre

0

Il est correct d'écrire du code comme:

<a href="javascript://" id="element">test link</a> 
<script type="text/javascript"> 
    functoin somethingcomplex() { 
bla bla bla 
} 

    $('element').onclick = function() { somethingcomplex(); } 

</script> 
0

Étant donné que votre 'code de test simplifié' n'a pas été exécuté, vous probablement avoir une erreur javascript ailleurs dans votre code. Le code Javascript qui suit une exception ne sera pas exécuté.

Avez-vous essayé d'examiner le script avant votre extrait (tel qu'il apparaît sur le client) à l'aide de Firebug ou de la barre d'outils du développeur IE?

0

J'ai eu un problème similaire et l'ai résolu en délimitant la réponse HTML du JavaScript avec un '^' et en les insérant séparément.

//============================================================================= 
function injectJavascript(src) 
    { 
    var scripts = document.getElementById("scripts"); 
    var javascriptSrc = document.createElement("script"); 
    javascriptSrc.setAttribute("type", "text/javascript"); 
    javascriptSrc.setAttribute("language", "JavaScript1.2"); 
    javascriptSrc.innerHTML = src; 
    scripts.appendChild(javascriptSrc); 
    } 
//============================================================================= 
function insertHtmlAndScript(target) 
    { 
    if (req.readyState == 4) // 4 == "loaded" 
     { 
     if (req.status == 200) // 200 == "Ok" 
      { 
      var resp = req.responseText.split("^"); 
      div = document.getElementById(target); 
      div.innerHTML = resp[0]; 
      injectJavascript(resp[1]); 
      } 
     else 
      { 
      alert("Could not retreive URL:\n" + req.statusText); 
      } 
     } 
    } 
//====================================================================== 

La seule raison pour laquelle je peux penser que cela fonctionne pendant que votre injection n'est pas que le HTML par rapport à l'interprétation JavaScript est enfilée tel que le JavaScript ne peut pas lier correctement ... mais c'est juste une supposition. Pouvez-vous donner un exemple plus complet de votre code?