- La casella il cui click ha evocato il menu
- Le ccrdinate dell'evento che ha evocato il menu
- L'evento click sul menu.
Come fare?
Miei appunti liberi, senza pretesa di dire necessariamente sempre cose giuste o sensate, durante l'apprendimento e la pratica della programmazione
//funzione che crea il menu popup. Funzione è ciò che si vuole che accada quando si clicca sul Menu.
function CreaMenu(evento,mouseSopra,mouseFuori,funzione){
var casellaCliccata=evento.srcElement;
var coordinataX=evento.clientX;
var coordinataY=evento.clientY
Mnu=document.createElement("div");
Mnu.id="menu";
Mnu.onmouseover=mouseSopra;
Mnu.onmouseout=mouseFuori;
Mnu.className="Menu";
Mnu.innerHTML=TestoDelMenu;
document.body.appendChild(Mnu);
Mnu.style.left=evento.clientX+"px";
Mnu.style.top=evento.clientY+"px";
Mnu.onmousedown=function(){
document.body.removeChild(Mnu);
funzione(event,casellaCliccata,coordinataX,coordinataY)
};
}
La funzione accetta come parametri l'evento che l'ha evocata, la funzione da eseguire al MouseOver, la funzione da eseguire al MouseOut, e la funzione da eseguire all'evento MouseDown sul menu.
function CreaMenu(evento,mouseSopra,mouseFuori){
Mnu=document.createElement("div");
Mnu.id="menu";
Mnu.onmouseover=mouseSopra;
Mnu.onmouseout=mouseFuori;
Mnu.className="Menu";
Mnu.innerHTML=TestoDelMenu;
document.body.appendChild(Mnu);
Mnu.style.left=event.clientX+"px";
Mnu.style.top=event.clientY+"px";
}
Conviene passare alla funzione che crea il menu anche la casella che è stata cliccata.
//funzione che crea il menu popup. Funzione è ciò che si vuole che accada quando si clicca sul Menu.
function CreaMenu(evento,mouseSopra,mouseFuori){
var casellaCliccata=evento.srcElement;
var coordinataX=evento.clientX;
var coordinataY=evento.clientY
Mnu=document.createElement("div");
Mnu.id="menu";
Mnu.onmouseover=mouseSopra;
Mnu.onmouseout=mouseFuori;
Mnu.className="Menu";
Mnu.innerHTML=TestoDelMenu;
document.body.appendChild(Mnu);
Mnu.style.left=evento.clientX+"px";
Mnu.style.top=evento.clientY+"px";
Mnu.onmousedown=function(){
var menuCliccato=event.srcElement;
casellaCliccata.innerHTML=menuCliccato.innerHTML;
};
}
//la funzione che trascrive il contenuto del menu popup sulla casella (ha per parametro la casella sulla quale
//è stato evocato il menu popup)
function trascrivi(cas){
var voce=document.createElement("span");
voce.className="menu";
voce.style.left=0+"px";
voce.innerHTML=stringArray(event.srcElement,15);
/*var stringArray=event.srcElement.innerHTML.split("");
for(var i=0;i<8;i++){
voce.innerHTML+=stringArray[i];
}*/
cas.appendChild(voce);
rimuoviMenuPopup();
}
//identifica il capostipite
function capostipite(elem){
while(elem.parentNode!=document.body){
elem=elem.parentNode;
}
return elem;
}
Banale.
function main(){
elemento=document.createElement("div");
elemento.className="classe1";
document.body.appendChild(elemento);
figlio=document.createElement("div");
figlio.className="classe2";
elemento.appendChild(figlio);
}
In base alle impostazioni del foglio di stile, ho ottenuto un quadrato più grande con all'interno un quadratino "figlio" più piccolo, sito in alto e a sinistra.
window.onload=main;
function main(){
elemento=document.createElement("div");
elemento.className="classe1";
document.body.appendChild(elemento);
figlio=document.createElement("div");
figlio.className="classe2";
elemento.appendChild(figlio);
elemento.attachEvent("onmousedown",function(){event.srcElement.style.backgroundColor="blue"});
}
Ecco: se io clicco sul "padre", l'evento viene recepito dal padre, cui è "attaccato" l'evento, e diventa blu il padre, che è l'"elemento origine" dell'evento.
<html>
<head>
<style>
.casella{
border:1px solid black;
font-size:10px;
position:absolute;
}
.casella2{
border:1px solid red;
font-size:8px;
position:absolute;
}
</style>
<script src="librerie/funzioni.js"></script>
<script>
window.onload=main;
var Nomi=new Array();
var Mattine=new Array();
var Pomeriggi=new Array();
var Notti=new Array();
function main(){
var larghezza=100;
CreaCaselle(0,0,30,30,15,larghezza,"casella",Nomi);
CreaCaselle(larghezza,0,30,30,15,larghezza,"casella",Mattine);
CreaCaselle(larghezza*2,0,30,30,15,larghezza,"casella",Pomeriggi);
CreaCaselle(larghezza*3,0,30,30,15,larghezza,"casella",Notti);
var dat=new Date();
dat.setDate(1);
for(var n=0;n<Nomi.length;n++){
Nomi[n].innerHTML=dataString(dat,WDLETTERALE);
if(dat.getDay()==0) Nomi[n].style.backgroundColor="#FFAAAA";
dat.setDate(dat.getDate()+1);
}
}
</script>
</head>
<body>
</body>
</html>