2010-08-25 27 views
1

Je la pièce de code suivantele chargement d'une fonction onclick

<a onclick="$('#result').load('codes/test.html');$('#result').show();" >XHTML code</a> 

il charges parfaitement le contenu de test.html dans la div résultat et rendre aussi visible. Jusqu'à ce point tous sont bons. Lorsque je tente d'ajouter une fonction prettyPrint() qui applique quelques modifications sur le texte et modifier le code à ce qui suit:

<a onclick="$('#result').load('codes/test.html');$('#result').show();prettyPrint();" >XHTML code</a> 

Je ne peux pas faire le prettyPrint() à travailler, au lieu si j'ajouter onmouseout="prettyPrint(); cela fonctionne quand J'enlève mon curseur. Je n'ai pas d'expérience avec javascript et jquery donc je ne sais pas quel est le vrai problème, donc j'apprécierais toute aide sur la façon de faire prettyPrint au travail onclick.

Répondre

3

Si vous utilisez jQuery Pourquoi prendre la peine avez-vous avec Javascript en ligne? Pourquoi ne pas:

<script type="text/javascript"> 
$(function(){ 
    $('#myLink').click(function(){ 
     $('#result').load('codes/test.html', function() { 
      $('#result').show(); 
      prettyPrint(); 
     }); 

     return false; 
    }); 
}): 
</script> 

<a id="myLink" href="#">XHTML code</a> 

Edit:

Code fixe il appelle prettyPrint() lorsque le rappel de charge est appelée.

+1

-1: cela ne résout pas le problème –

+0

pourquoi il ne résout pas le problème? – rochal

+0

Oui, -1 aussi, même si je pense comme vous: "OH MON DIEU STOP INLINE JS!" –

0

Vous pouvez effectuer les opérations suivantes:

$('#result').show("fast",function(){ prettyPrint();}); 
2

La charge est asynchrone. Lorsque prettyPrint est appelée, le texte peut ne pas être encore là. Load() prend un second argument qui est une fonction à appeler lorsque le chargement est terminé. J'ai déménagé le prettyPrint et le spectacle là-bas.

+0

merci, cela a résolu mon problème! :) – Sotiris

0

Vous devez utiliser une fonction de rappel:

<a onclick="$('#result').load('codes/test.html', function() {prettyPrint();}).show();" >XHTML code</a> 
0

Votre problème est que vous ne comprenez pas comment fonctionne .load(). Il ne bloque pas tant que les données ne sont pas chargées. Au lieu de cela, seulement commence chargement et retourne immédiatement. Par conséquent, votre fonction prettyPrint est appelée lorsque les données ne sont pas encore chargées.

Pour résoudre ce problème, passez une fonction de rappel à .load. Ce rappel sera appelé lorsque la charge complète:

$("#result").load('...', 
    function() { 
     $("#result").show(); 
     prettyPrint(); 
    } 
} 
+0

Ou vous pouvez faire 'load()' fonctionne de manière synchrone ... Juste blague ^^ –