11548 sujets

JavaScript, DOM et API Web HTML5

Bonjour,
voici le code:


Code=Code+"<a name=\"#a_"+nomunite+"\"></a>\n"		
+"<a href='#a_"+nomunite+"' onClick=\"javascript: document.getElementById('if"+nomunite+"').src = 'mp3hc+.html';if (document.getElementById('tab_"+nomunite+"').style.display=='none') {document.getElementById('tab_"+nomunite+"').style.display='';} else {document.getElementById('tab_"+nomunite+"').style.display='none'};setTimeout('var info = \'"+part[0]+"\\\\"+part[1]+"\\\\"+part[2]+"\\\\"+part[3]+"\\\\"+part[4]+"\\\\"+part[5]+"\'; window.frames['if"+nomunite+"'].affiche(info)',1000)\">"+nomunite+"</a>\n";



puis plus loin:


document.getElementById("remplidiv").innerHTML = Code;



c'est avec ce javascript que j'ai du mal :


setTimeout('var info = \'"+part[0]+"\\\\"+part[1]+"\\\\"+part[2]+"\\\\"+part[3]+"\\\\"+part[4]+"\\\\"+part[5]+"\'; window.frames[\'if"+nomunite+"\'].affiche(info)',1000)


par définition setTimeout('code_js', temps) les guillemets sont indispensables...

je ne sait pas comment l'insérer...?
ça revient au même que de faire:


document.write("setTimeout('var info = \'"+part[0]+"\\\\"+part[1]+"\\\\"+part[2]+"\\\\"+part[3]+"\\\\"+part[4]+"\\\\"+part[5]+"\'; window.frames[\'if"+nomunite+"\'].affiche(info)',1000)");


j'ai bien rajouté des antislash mais ça ne marche pas... (alors en plus je n'ai pas accès au code généré puisqu'il se trouve dans une div)
Merci
Modifié par xmlhub (20 Feb 2007 - 17:36)
Bon ! Je ne vois pas exactement ce que tu veux faire mais, si ton problème réside dans un surcroît de " et de ' ingérables ensemble sur une même ligne, pourquoi n'en fais-tu pas deux :

La première construisant ta chaîne de caractères : info="..."+"..."+....
La seconde passant ta chaîne en argument au setTimeout.
Oui là c'est un peu bourrin quand même, il est plus propre et plus simple de passer par une fonction :


function mafonction(){
  ...
}

setTimeout(mafonction, 1000);


et pour info tu peux voir le code généré en Javascript avec Firefox et la Webdeveloper Toolbar (View Source -> View generated source)
Merci pour vos réponses,
Je précise que ce scipt est inclu dans une boucle for.
J'ai essayé de le mettre dans une fonction:


Code="\n"
+="<script>\n"
+="function sett(vari,nun) {\n"
+=" window.frames['if'+nun+''].affiche(vari)\n"
+="}\n"
+="<\/script>\n";


et là il me dit "Impossible d'affecter à '\[string\]'" (sans les antislash)

Je précise que je ne peux me mettre sous firefox car c'est une application qui ne sera utilisable qu'avec IE pour cause d'activeX explorer (new Enumerator(FSO.Drives)) et autre powerpoint... je sais la honte Smiley confused

et après de faire:



Code=Code+"<a name=\"#a_"+nomunite+"\"></a>\n"		
+"<a href='#a_"+nomunite+"' onClick=\"javascript: document.getElementById('if"+nomunite+"').src = 'mp3hc+.html';if (document.getElementById('tab_"+nomunite+"').style.display=='none') {document.getElementById('tab_"+nomunite+"').style.display='';} else {document.getElementById('tab_"+nomunite+"').style.display='none'};setTimeout(sett('"+pmp+"','"+nomunite+"'),1000)\">"+nomunite+"</a>\n"




et si je met la fonction à l'extérieur:


function sett(vari,nun) {
	window.frames['if'+nun+''].affiche(vari);
	}



ben le setTimeout ne marche pas il appele la fonction au moment du click!!? que je mettes 1000 ou 6000!!!!!?????

Le but de tout cela est de générer un code qui va permettre lorsque l'on clic sur le lien d'ouvrir une iframe (déjà existante), de charger un html puis (c'est là qu'intervient le setTimeout) de charger un swf dedans...
En effet tant que le html n'est pas chargé entièrement je ne peux lui faire passer le chemin du swf!!!
Modifié par xmlhub (20 Feb 2007 - 15:07)
Bon !
tout cela me parait TRES compliqué relativement à ce que tu souhaites faire.
Il n'empèche qu'en finale, et entre autres problèmes, tu sembles chercher à utiliser setTimeout comme une temporisation, un wait.
Or, ce n'est pas possible directement.
Il y a déjà un certain nombre de threads qui traitent de cela dans ce forum.
aCOSwt a écrit :
Bon !
tout cela me parait TRES compliqué relativement à ce que tu souhaites faire.
Il n'empèche qu'en finale, et entre autres problèmes, tu sembles chercher à utiliser setTimeout comme une temporisation, un wait.
Or, ce n'est pas possible directement.
Il y a déjà un certain nombre de threads qui traitent de cela dans ce forum.


effectivement si je fais setTimeout(sett, 1000) ça marche la fonction se lance une seconde après mais je ne peux y passer mes paramètres... Smiley sweatdrop
j'ai fais une recherche sur le forum avec "setTimeout" je ne vois qu'une réponse qui ne me convient pas.
Avec "temporisation" ou "wait" je n'ai rien... Smiley bawling
je sais que c'est plutôt compliqué Smiley confused mais je ne vois pas d'autres solutions:
1-choix d'un répertoire local
2-récupération du chemin des fichiers contenus dans ce dernier
3-écriture de la page avec les liens ayant le chemin local des fichiers
4-je l'insère dans une div
5-si on clic sur un des liens j'ouvre une page HTML existante dans un iframe générer à l'étape 3 et j'y charge le fichier (c'est là que ça pose pb)

pour le dernier point j'arrive à le faire en mettant un autre lien que j'ai appelé "charger" mais j'en ai plusieurs à charger et j'aimerai que cela soit automatique... Smiley biggrin Smiley eek

Merci, si quelqu'un peut m'indiquer une méthode pour faire une tempo en utilisant une fonction avec paramètres.
Salut,

Il te suffit de faire un tout petit effort de plus avec tes petits doigts boudinés et de changer les paramètres de recherche : "Depuis 30 jours" => "N'importe quand". Smiley cligne
avec mon cerveau boudiné Smiley confus , je vois pas! Smiley biggol
j'ai bien retrouvé tes expliquation:


function change_opacity(evt) {
	var cible = this;
        cible.setAttribute('fill-opacity','0.0');    // code OK jusque là 

	setTimeout(function() {cible.setAttribute('fill-opacity','1.0');},5000);
}



mais je ne vois pas comment l'appliquer ici

j'ai vu ça aussi:


En fait, ces deux lignes sont équivalentes :setTimeout("alert(1);", 1000);
setTimeout(new Function("alert(1);"), 1000);
La différence avec ceci :setTimeout(function() {alert(1);}, 1000);
c'est que dans cette dernière solution, la fonction anonyme hérite de la portée dans laquelle elle est créée (dans ton exemple, la varible "cible" lui est accessible).


j'ai essayé:


+"<a href='#a_"+nomunite+"' onClick=\"javascript:setTimeout(new Function('alert("+pmp+");'),1000)\">"+nomunite+"</a>\n"


pas d'alert!

puis j'ai essayé:



setTimeout(new Function(alert('"+pmp+"')),6000)



et la une alert au click sans respecter la temporisation.
Mon problème est que je dois jouer avec les guillemets et les antislash en plus de créer la temporisation...

Mon problème est simple je vais le formuler différement:
imaginons qu'on ouvre un popup:

<a href='#' onclick='var mavari="ok";var win=window.open("","_blank");win.document.write("<a href=# onclick=\"setTimeout(\"this.close()\", 1000))\">fermer</a>")'>ouvrir</a>

là j'en peux j'arrive plus à rien ça marche même pas et mon problème non plus Smiley bawling ... je regarde les liens je trouve pas Smiley decu , mon cerveau est plus que boudiné Smiley biggol dites-moi si c'est possible de faire une temporisation sinon je garde mes boutons "charger" Smiley sweatdrop . Je cherche aussi à éviter une fonction donc si setTimeout ne s'applique que dans une fonction c'est mort... Je sais plus quoi dire en tout cas merci pour ces réponses...
Modifié par xmlhub (20 Feb 2007 - 17:10)
Bon, franchement je n'ai pas le courage ni le temps de me plonger dans ton code, il y a trop de "document.write" et "<a href="javascript:"></a>" imbriqués pour moi. Smiley cligne

Pour setTimeout, c'est très simple : le meilleure façon de l'utiliser est de passer une fonction en premier paramètre. Si tu souhaites "paramétrer" cette fonction, il faut utiliser une fonction anonyme, par exemple :
var a = 1, b = 2;

setTimeout(function() { maFonction(a, b); }, 5000);
Julien Royer a écrit :
Bon, franchement je n'ai pas le courage ni le temps de me plonger dans ton code, il y a trop de "document.write" et "<a href="javascript:"></a>" imbriqués pour moi. Smiley cligne

Pour setTimeout, c'est très simple : le meilleure façon de l'utiliser est de passer une fonction en premier paramètre. Si tu souhaites "paramétrer" cette fonction, il faut utiliser une fonction anonyme, par exemple :
var a = 1, b = 2;

setTimeout(function() { maFonction(a, b); }, 5000);



Coool COOOL cOoooOOOOL Smiley smile Smiley biggrin Smiley lol Smiley sweatdrop
ça marche merci Ahalala j'avais bien vu ça mais le temps de savoir ou mettre les guillemets et les antislash si besoin j'ai dû passer à coté de la bonne formulation:

function sett(vari,nun) {
window.frames['ifram'+nun].affiche(vari);
}


Code="\n";
//for tous les fichiers...

Code+="<a href='#a_"+nomunite+"' onClick=\"javascript: document.getElementById('ifram"+nomunite+"').src = 'mp3hc+.html';if (document.getElementById('tab_"+nomunite+"').style.display=='none') {document.getElementById('tab_"+nomunite+"').style.display='';} else {document.getElementById('tab_"+nomunite+"').style.display='none'};setTimeout(function() {sett('"+pmp+"','"+nomunite+"')},1000)\">"+nomunite+"</a>\n";

//....

Code=Code+"<SPAN id=\"tab_"+nomunite+"\" style=\"DISPLAY: none\" name=\"tab_"+nomunite+"\">\n"
+"<IFRAME SRC='' id='ifram"+nomunite+"' name='ifram"+nomunite+"' width='1010' HEIGHT='450' scrolling='auto'></IFRAME><hr>\n"
+"</SPAN><br>\n";

//....
document.getElementById("divaremplir").innerHTML = Code;


Magnifique merci beaucoup (une après-midi pour faire un truc aussi simple mais c'est de ma très grande faute Smiley ravi )

Merci à aCOSwt et à MrPatate
et surtout Merci à Julien

Merci à tous je vous aime Smiley lol
Modifié par xmlhub (20 Feb 2007 - 17:38)