OVH Cloud OVH Cloud

Affichage d'une palette de couleur en JS

2 réponses
Avatar
Dindus
Hello

j'utilise cette fonction pour faire apparaitre une palette de choix de
couleur
la palette apparait, mais la map qui est sensé effectuer une action selon la
couleur clickée ne repond pas

quel peut etre le problème ???

merci d'avance
Dindus

function affiche_palette(X, Y)
{
promptbox = document.createElement('div');
promptbox.setAttribute ('id' , 'prompt')
document.getElementsByTagName('body')[0].appendChild(promptbox)
promptbox = eval("document.getElementById('prompt').style")
promptbox.position = 'absolute'
promptbox.top = Y
promptbox.left = X
promptbox.width = 300
promptbox.border = 'outset 1 #bbbbbb'
document.getElementById('prompt').innerHTML = "<map name='colmap'>";
document.getElementById('prompt').innerHTML += "<area shape=\"rect\"
coords=\"0,0,287,78\" href='javascript:alert('youpi');'>";
document.getElementById('prompt').innerHTML += "</map>";
document.getElementById('prompt').innerHTML += "<a href><img
usemap=\"#colmap\" src=\"/images/palette.png\" border=\"0\" width=\"289\"
height=\"78\"></a><br>";
document.getElementById('prompt').innerHTML += "<input type=button
value=\"annuler\"
onClick='document.getElementsByTagName(\"body\")[0].removeChild(document.get
ElementById(\"prompt\"))'>";
document.getElementById("prompt").focus();
}

2 réponses

Avatar
YD
Hello

j'utilise cette fonction pour faire apparaitre une palette de choix de
couleur
la palette apparait, mais la map qui est sensé effectuer une action selon la
couleur clickée ne repond pas

quel peut etre le problème ???


Tu écris tes éléments (en particulier ceux imbriqués - map et area) en plusieurs
fois, forçant le navigateur à créer des balises de fermeture :
document.getElementById('prompt').innerHTML = "<map name='colmap'>";
ceci crée l'élément et ajoute automatiquement la balise de fermeture </MAP>, pour
que l'arbre HTML soit complet... Le code est exécuté instruction par instruction !

Quand tu te sers d'innerHTML, écris d'un coup tout le contenu de la balise comme
ceci par exemple :
document.getElementById('prompt').innerHTML = "<map name='colmap'>" +
"<area shape="rect" coords="0,0,287,78" href='javascript:alert('youpi');'>" +
"</map><img usemap="#colmap" src="/images/palette.png" " +
"border="0" width="289" height="78"><br>";

etc...

Une autre solution (meilleure sans doute) serait d'utiliser les fonctions du DOM pour
construire le fragment HTML à insérer pas à pas :

function affiche_palette(X, Y)
{
promptbox = document.createElement('div');
promptbox.setAttribute ('id' , 'prompt')
document.getElementsByTagName('body')[0].appendChild(promptbox)
promptbox.style.position = 'absolute'
promptbox.style.top = Y
promptbox.style.left = X
promptbox.style.width = 300
promptbox.style.border = 'outset 1 #bbbbbb';
aMap=document.createElement("MAP");
aMap.setAttribute("name","colmap");
aMap.id="colmap";
area1=document.createElement("AREA");
area1.shape="rect";
area1.coords="0,0,287,78";
area1.href="javascript:alert('youpi');"
aMap.appendChild(area1);
promptbox.appendChild(aMap);
palette=document.createElement("IMG");
palette.setAttribute("usemap","#colmap");
palette.src="/images/palette.png";
palette.style.border="none";
palette.width= 289;
palette.height= 78;
promptbox.appendChild(palette);
cancelBtn=document.createElement("INPUT");
cancelBtn.setAttribute("type","button");
cancelBtn.value="Annuler";
cancelBtn.onclick=Function("document.body.removeChild(promptbox)");
promptbox.appendChild(cancelBtn);
}

merci d'avance
Dindus


Si ça peut aider...

--
Y.D.

Avatar
Dindus
ouai c'était bien un problème de concaténation de chaine

merci beaucoup ca me sort une bonne epine du pied

Dindus

YD a écrit dans le message :
41091fcc$0$31404$
Hello

j'utilise cette fonction pour faire apparaitre une palette de choix de
couleur
la palette apparait, mais la map qui est sensé effectuer une action
selon la


couleur clickée ne repond pas

quel peut etre le problème ???


Tu écris tes éléments (en particulier ceux imbriqués - map et area) en
plusieurs

fois, forçant le navigateur à créer des balises de fermeture :
document.getElementById('prompt').innerHTML = "<map
name='colmap'>";

ceci crée l'élément et ajoute automatiquement la balise de fermeture
</MAP>, pour

que l'arbre HTML soit complet... Le code est exécuté instruction par
instruction !


Quand tu te sers d'innerHTML, écris d'un coup tout le contenu de la balise
comme

ceci par exemple :
document.getElementById('prompt').innerHTML = "<map name='colmap'>" +
"<area shape="rect" coords="0,0,287,78"
href='javascript:alert('youpi');'>" +

"</map><img usemap="#colmap" src="/images/palette.png" " +
"border="0" width="289" height="78"><br>";

etc...

Une autre solution (meilleure sans doute) serait d'utiliser les fonctions
du DOM pour

construire le fragment HTML à insérer pas à pas :

function affiche_palette(X, Y)
{
promptbox = document.createElement('div');
promptbox.setAttribute ('id' , 'prompt')
document.getElementsByTagName('body')[0].appendChild(promptbox)
promptbox.style.position = 'absolute'
promptbox.style.top = Y
promptbox.style.left = X
promptbox.style.width = 300
promptbox.style.border = 'outset 1 #bbbbbb';
aMap=document.createElement("MAP");
aMap.setAttribute("name","colmap");
aMap.id="colmap";
area1=document.createElement("AREA");
area1.shape="rect";
area1.coords="0,0,287,78";
area1.href="javascript:alert('youpi');"
aMap.appendChild(area1);
promptbox.appendChild(aMap);
palette=document.createElement("IMG");
palette.setAttribute("usemap","#colmap");
palette.src="/images/palette.png";
palette.style.border="none";
palette.width= 289;
palette.height= 78;
promptbox.appendChild(palette);
cancelBtn=document.createElement("INPUT");
cancelBtn.setAttribute("type","button");
cancelBtn.value="Annuler";
cancelBtn.onclick=Function("document.body.removeChild(promptbox)");
promptbox.appendChild(cancelBtn);
}

merci d'avance
Dindus


Si ça peut aider...

--
Y.D.