Witam. Poszukuje javascriptu, który otwierałby zakładki wewnątrz strony, a nie wywoływał dodatkowych stron.
za okazane zainteresowanie dziekuje.
function individuaOggetto(e){ //individua l'oggetto da cui e' partito l'evento // questa prima parte serve per avere una gestione degli oggetti comune if (!e) var e = window.event; // e gives access to the event in all browsers //questa seconda parte individua l'elemento che ha scatenato l'oggetto var targ; if (e.target) targ = e.target; else if (e.srcElement) targ = e.srcElement; if (targ.nodeType == 3) // defeat Safari bug targ = targ.parentNode; //restituisce l'elemento return targ; } /***************************** funzione che crea i menu *****************/ function Menu(menu_id,attivaClick,position,attivaOver,defaultGroup) { //creo una classe menu /** proprieta' della classe menu_id e' il nome del menu: sempre obbligatorio attivaClick, attiva l'evidenziazione del menu al click del moude attivaOver, attiva l'effetto di visualizzione contenuto al mouse over position, indica la posizione del tab attivo **/ this.menu_id=menu_id; this.attivaClick=attivaClick; this.position=position; this.attivaOver=attivaOver; this.defaultGroup=defaultGroup; /*** metodi della classe ***/ this.Menu=function Menu() { //costruttore /*** lancio funzioni che costruiscono la classe***/ this.inizializzaMenu(); } this.inizializzaMenu=function inizializzaMenu() { //se il click e' attivato ed e' il primo elemento, all'inzializzazione del menu, //evidenzio il primo tab //con position specifico, l'elemento che deve essere attivato var elementoEvidenziato=0; //di default l'elemento evidenzato e' il primo if (this.position) { elementoEvidenziato=this.position; } varGlobMenu=eval(this.menu_id+'varGlob=new Array()'); //creo una variabile globale che ha come nome //il nome del menu, e contiene la posizione dell'elemento evidenziato //se il menu non necessita mouse over la variabile globale e' settata a 'no' varGlobMenu[0]=this.position; //posizione iniziale varGlobMenu[1]='no'; //elemento evidenziato varGlobMenu[2]='no'; //gruppo di default if (this.attivaOver) { varGlobMenu[1]=this.position; if (this.defaultGroup) { varGlobMenu[2]=this.defaultGroup; } } ancore=document.getElementById(this.menu_id).getElementsByTagName('a'); lunAncore=ancore.length; for (var n=0;n<lunAncore;n++) { /***gestione mouse over e mouse out ***/ if ( (this.attivaClick)&&(n==elementoEvidenziato) ) { ancore.item(elementoEvidenziato).onmouseover=null; ancore.item(elementoEvidenziato).onmouseout=null; separaGruppi(ancore.item(elementoEvidenziato).id); //evidenzia il gruppo corrispondente al tab if(ancore.item(elementoEvidenziato).className.indexOf('_over')==-1) { //se l'elemento e' instato mouse out, lo coloro cambiaOver(ancore.item(elementoEvidenziato)); } } else { //se non c'e' il click e si tratta degli altri elementi //variabile per vedere se c'e' da attivare il mouse over if ( ( ( (this.attivaClick)&&(this.attivaOver) )&& ( (ancore.item(n).id!='') ) || ( (ancore.item(n).id=='')&&(varGlobMenu[2]!='no') ) ) ) { //se c'e' da visualizzare gli elementi al mous eover ancore.item(n).onmouseover=tabClick; } else { a=ancore.item(n).onmouseover; ancore.item(n).onmouseover=tabOver; } ancore.item(n).onmouseout=tabOut; } /***gestione click ***/ if(this.attivaClick) { ancore.item(n).onclick=tabClick; } } function tabOver(e){ var el=individuaOggetto(e); //el e' elemento che ha fatto partire l'evento //la funzione individuaOggetto(e) e' etserna a questa classe cambiaOver(el); } function cambiaOver(el) { if ( (el.previousSibling!=null)&&(el.previousSibling.tagName.toLowerCase()=='span') &&(el.className.indexOf('_over')==-1) ) { el.className=el.className+'_over'; el.previousSibling.className=el.previousSibling.className+'_over'; el.nextSibling.className=el.nextSibling.className+'_over'; } else if (el.id.indexOf('_over')==-1) { el.id=el.id+'_over'; } } function tabOut(e) { var el=individuaOggetto(e); //el e' elemento che ha fatto partire l'evento cambiaOut(el); } function cambiaOut(el) { if ( (el.previousSibling!=null) &&(el.previousSibling.tagName.toLowerCase()=='span') &&(el.className.indexOf('_over')>0) ) { //se e' un menu con tab di tre elementi.. el.className=el.className.replace('_over',''); el.previousSibling.className=el.previousSibling.className.replace('_over',''); el.nextSibling.className=el.nextSibling.className.replace('_over',''); } else if (el.id.indexOf('_over')>0) { //se e' un menu con tab img... el.id=el.id.replace('_over',''); } } function controllaClick(e,el,id_menu) { if (!e) var e = window.event; var varGlobMenu=eval(id_menu+'varGlob'); /* Questa parte disabilita' l'over in caso di click. Non necessaria qui. if(e.type=='click') { eval(id_menu+"varGlob='no';"); } */ //else if(el.id!=''){ // || ((el.id=='')&&(varGlobMenu[2]!='no')) if ( (varGlobMenu[1]!='no') && (el.id!='') ){ var anch=document.getElementById(id_menu).getElementsByTagName('a'); var lunAnch=anch.length; for (var m=0;m<lunAnch;m++) { if (anch.item(m).id==el.id) { varGlobMenu[1]=m; } } } } function tabClick(e) { var el=individuaOggetto(e); //el e' elemento che ha fatto partire l'evento controllaClick(e,el,el.parentNode.parentNode.id); var varGlobMenu=eval(el.parentNode.parentNode.id+'varGlob'); //rimuovo mouse over e mouse out dall'elemento: el.onmouseover=null; el.onmouseout=null; cambiaOver(el); //la struttura del documento e' UL > LI > A -- noi siamo nell'A var ancore=document.getElementById(el.parentNode.parentNode.id).getElementsByTagName('a'); var lunAncore=ancore.length; for (var n=0;n<lunAncore;n++) { if(ancore.item(n)!=el) { //riassegno gli eventi agli altri elementi cambiaOut(ancore.item(n)); //riassegno lo stato mout if ( ((varGlobMenu[1]!='no')&& ( (ancore.item(n).id!='') ) || ( (ancore.item(n).id=='' &&varGlobMenu[2]!='no') ) ) ) { //controllo che la visualizzazione dei contenuti all'over //non sia disabilitata e che l'id dell'elemento non sia vuoto ancore.item(n).onmouseover=tabClick; } else { ancore.item(n).onmouseover=tabOver; } ancore.item(n).onmouseout=tabOut; } /* else if ( (el.id=='') && (varGlobMenu[2]!='no') ) { ancore.item(n).onmouseout=function(){ cambiaOut(el); cambiaOver(ancore.item(varGlobMenu[0]) ); if (ancore.item(varGlobMenu[0]).id!='') { separaGruppi(ancore.item(varGlobMenu[0]).id); } else if(varGlob[2]!='no') { separaGruppi(varGlobMenu[2]); } } }*/ } var elemento=''; if(el.id.indexOf('_over')>0) { //se l'id dell'elmento contiene '_over'. //non puo' succedere per il cambio di classe //ma puo' succedere pe ril cambio di ID. //Quindi questo controllo e' utile per la classe MenuID //che erdita da questa. elemento=el.id.replace('_over',''); } else if (el.id==''&&varGlobMenu[2]!='no') { elemento=varGlobMenu[2]; } else elemento=el.id; return separaGruppi(elemento); //funzione che verifica se ci sono da visualizzare dei contenuti } } this.Menu(); //lancio il costruttore } /**************************** funzione per la gestione dei gruppi **************/ function separaGruppi(el_id) { if (el_id!=null) { //se e' settato l'elemento id var temp=(el_id).split('||'); //se all'interno dell'id c'e' || --> i gruppi da ricaricare sono 2 alla volta var tempL=temp.length; for (var n=0;n<tempL;n++) { var ritorno=visualizzaContent(temp[n]); if (n==tempL-1) { // se e' l'ultimo elemento dell'id return ritorno; // restituisco il valore } } } else return true; //se non e' settato l'ID si prosegue con il link } function visualizzaContent(el_id) { //la funzione deve restituire true o false //true fa proseguire il link; false ferma il link /*** se e' settato l'ID faccio partire le funzioni che cambiano il blocco ***/ if (el_id.indexOf('-')>0) { //se e' settato l'id e se contiene il trattino var temp=(el_id).split('-'); //ricavo due parti con: gruppo-blocco //gruppo e' un oggetto quindi va trasformato da stringa a oggetto var gruppo=eval(temp[0]); var blocco=temp[1]; if (gruppo) { //se l'oggetto gruppo e' stato creato, rimando al link statico gruppo.mostraBlocco(blocco); // visualizzo il blocco e fermo il link return false; } else { //se l'oggetto gruppo non e' stato creato proseguo con il link statico return true; } } } /***************************** funzione che precarica tutte le imgs *****************/ function preloadImgs(args) { for(var n=0;n<arguments.length;n++) { preloadImg(arguments[n]); } //funzione che precarica un immagine function preloadImg(percorso) { var temp=new Image(); temp.src=percorso; } } /***************************** funzione per la visualizzazione blocchi *****************/ function Gruppo(args) { this.blocchi=Gruppo.arguments; //assegno all'array "blocchi" i valori passati this.lunBlocchi=this.blocchi.length; // conto quanti blocchi sono this.bloccoEsiste=function bloccoEsiste(blocco) { //verifico che il blocco faccia parte del gruppo //restituisce true se il blocco eiste, false se non esiste var esiste=false; for (var n=0;n<this.lunBlocchi;n++) { if (blocco==this.blocchi[n]) { esiste=true; break; } } return esiste; } this.mostraBlocco=function mostraBlocco(blocco) { if(this.bloccoEsiste(blocco)==false) { void(0); //se il blocco non esiste non fare niente } else { for (var n=0;n<this.lunBlocchi;n++) { if (blocco==this.blocchi[n]){ document.getElementById(this.blocchi[n]).style.display='block'; } else { document.getElementById(this.blocchi[n]).style.display='none'; } } } } }