Je n'interviens pas pour donner une solution : Bovino et Iakou s'en sont charg�s.
Mais j'ai remarqu� quelque chose.

Envoy� par
hannibal974
Voil� le tableau que je poss�de dans ma page (j'utilise Symfony2) avec l'appel � mon fichier SelectPlage.js :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| <table class="cal_calendrier">
<tr>
...
</tr>
{% for a in 0..5 %}
<tr>
{% for b in 0..6 %}
<td class="cal_calendrier_td">
{% if tab[a][b] is defined %}
<p onclick="SelectPlage('{{tab[a][b]}}', '{{chaine}}', '{{date}}')">{{tab[a][b]}}</p>
{% endif %}
</td>
{% endfor %}
</tr>
</br>
{% endfor %}
</table> |
Symfony c'est du code serveur. Tes variables serveur {{chaine}} et {{date}} sont-elles correctes au moment o� tu les utilises ? Montre-nous un extrait du code HTML g�n�r� s'il-te-pla�t (Ctrl+U dans ton navigateur). �a va peut-�tre r�v�ler un probl�me avec le onclick qu'on n'avait pas encore rep�r�.
Tiens d'ailleurs, petit conseil pour l'ergonomie :
p[onclick] { cursor: pointer; }
Autre chose : ce </br> qui est � la fois syntaxiquement incorrect (c'est <br />) et incongru ici : tu n'as pas besoin de faire un saut de ligne entre deux rangs de tableau.
Une remarque � propos de la tentative d'include que tu as mise en commentaire. �a ne peut pas marcher avec document.write : �a va juste vider ta page et tu seras bien emb�t�.
Voici la version non destructrice de ce que tu voulais faire :
1 2 3
| var $script = document.createElement("script");
$script.src = './Post.js';
document.head.appendChild($script); |
(Note : document.head est relativement r�cent, j'aurais pu �crire document.getElementsByTagName("head")[0] mais je ne voulais pas surcharger mon exemple.)
Si tu mets ces trois lignes de code au d�but de ta fonction SelectPlage, voil� ce qui va se passer :
- L'ex�cution de SelectPlage est interrompue ;
- Le fichier "Post.js" est recherch�, puis �ventuellement t�l�charg� s'il est sur un serveur distant, en tout cas il est charg� en m�moire ;
- Quand le chargement du fichier se termine, il est pass� � l'interpr�teur qui va l'interpr�ter de mani�re asynchrone pour permettre � SelectPage de reprendre son ex�cution ;
- Par cons�quent, quand l'ex�cution de SelectPage reprend, la fonction post n'est pas encore disponible car le fichier est en cours d'interpr�tation.
Bien entendu, la solution propos�e par Bovino et Iakou est la meilleure, car de loin la plus simple. Cependant, si un jour tu as besoin de charger dynamiquement un script, la solution est de surveiller l'�v�nement load que le script doit lancer quand il est pr�t, c'est-�-dire quand il a �t� charg� et interpr�t� et ex�cut�. Voici un exemple :
Le fichier HTML, nomm� test.html :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| <script>
function test( ){
var $script = document.createElement("script");
$script.addEventListener("load", function( ){
console.log("externe.js a lance son load"); // 3
});
$script.src = 'externe.js';
document.head.appendChild($script);
console.log("fin de l'execution de test"); // 1
}
</script>
<input type=button value=test onclick="test()"> |
Le fichier JavaScript � charger, nomm� externe.js :
console.log("externe.js a ete execute"); // 2
Quand tu charges la page HTML et que tu cliques sur le bouton de test, la console affiche ceci :
1 2 3
| "fin de l'execution de test" test.html:12
"externe.js a ete execute" externe.js:1
"externe.js a lance son load" test.html:6 |
Ce qui montre bien dans quel ordre les choses se sont d�roul�es.
Partager