Newsgroup: it.comp.lang.javascript
Titolo: Asp + javascript

Premetto che questo script non è mio!!
<script language=javascript >
 var menuItem  = new Array(); //testo da visualizzare
 var menuURL   = new Array(); //link del menu
 var menuID   = new Array(); //id del menu
 var subTab   = new Array(); //indica se il frame e' gia stato caricato e il 
suo subTab Selezionato
 var bottomTab  = new Array(); //elenco delle finestre aperte, in diretto 
link con menuItem
 var menuImg   = new Array(); //elenco delle immagini
 <%
 sql_menu = "SELECT * FROM MENU ORDER BY ordine"
 set rs = connDB.execute(sql_menu,num)
 i = 0
 while not rs.eof %>
  menuItem[<%=i%>]  = '<%=trim(rs("testo"))%>'
  menuURL[<%=i%>]  = '<%=trim(rs("location"))%>'
  menuID[<%=i%>]   = '<%=trim(rs("idmenu"))%>'
  subTab[<%=i%>]   = -1; //inizializzazione
  bottomTab[<%=i%>]  = 0; //nessuna in visualizzazione al caricamento
  <%i = i+1
  rs.movenext
 wend
 set rs = nothing
  %>
//click su menu
function menu_click(num) {
 if (winModal || winLoading) {
  alert("<%=("Attendere il termine dell'esecuzione")%>");
  return;
 }
   //window.history.length = 0;
   // se questo test è true, ovvero esiste l'array.all
   // il browser è IE e la procedua è applicabil
   if (document.all) {
        var prevTab=0;
      var builder = "";
           // se ho cliccato il frame corrente, evito di
     // crearne uno o massimizzarlo se è già creato
     if (currentTab != num) {
            prevTab=currentTab;
         // imposto qui il tab corrente
      currentTab=num;
            // qui riempio il corpo
      build_menu();
         if (!menuFrame[currentTab]) {
      // il frame non esiste, per cui lo creiamo
       if (!document.all('iframe'+currentTab)) {
        // gli assegno un livello pari all'ordinamento della funzione  --  
visibility:hidden
        builder="<iframe scrolling='no' id=iframe"+currentTab+" 
name=iframe"+currentTab+" frameborder=0 style='position:absolute; top: 0px; 
left: 0px; height:100%; width:100%; display:none; z-index: 
"+currentTab+"'></iframe>";
        // inserisco l'Iframe appena creato come ultimo tag del div con il 
corpo della funzione
        document.all('tabBody').insertAdjacentHTML("beforeEnd",builder);
       }
       // assegno l'iframe appena creato ad una casella dell'array
             menuFrame[currentTab]=document.all('iframe'+currentTab);
          // nascondo il precedente
       if (menuFrame[prevTab]) { menuFrame[prevTab].style.display = 
"none"; } //visibility="hidden"; }
          if (menuFrame[currentTab]) {
              // dimensiono il div appena creato
        menuFrame[currentTab].style.height=(document.all('tabBody').offsetHeight-10)+"px";
              menuFrame[currentTab].style.width=(document.all('tabBody').offsetWidth-10)+"px";
           // lo rendo visibile
        menuFrame[currentTab].style.display = ""; //visibility="visible";
             } // if
         } else {
      // il frame esiste, percui basta evidenziarlo
             if (menuFrame[prevTab] && document.all('iframe'+currentTab)) 
{ menuFrame[prevTab].style.display = "none";} //visibility="hidden"; }
          if (menuFrame[currentTab] && document.all('iframe'+currentTab)) 
{ menuFrame[currentTab].style.display = "";} //visibility="visible"; }
         }
      //scrittura dei sub-tab e caricamento funzione
      sub_menu_click(subTab[currentTab],0);
     } // cliccato il frame corrente o meno
     //bottom.innerHTML="Funzionalità corrente: " + menuItem[currentTab];
   } else { // procedura non applicabile
         alert("This tab folder is designed for Internet Explorer Browse 
only.  Sorry!");
     history.go(-1);
   }
} // menu_Click
</script>
non mi funzia la parte function menu_click(num) non arrivo a capire il 
perche
quel num non ha nessun valore dove sta secondo voi l'inghippo? 

 quel num non ha nessun valore dove sta secondo voi l'inghippo?
Allora significa che "l'inghippo" sta nel codice che richiama
"menu_click(num)", perché se num non ha alcun valore, significa che non gli
viene passato come parametro.
-- 
~ "Nell'anno 1969 è bastata la potenza di calcolo di due Commodore 64 per
mandare con successo una navicella sulla Luna. Nell'anno 2003 è
necessario un Pentium 4 a 2000 Mhz per far funzionare Windows XP.
Qualcosa deve essere andato storto."

 ha scritto nel messaggio 
news:rs9kamjv...@ID-171124.news.individual.net...

infatti ma se vedi qua:    set rs = connDB.execute(sql_menu,num) quel num 
esiste
io ho spulciato tutti gli include ma di quel num neanche l'ombra per cui ho 
pensato che quel num fosse un parametro
se io ho idmenu ed è il valore che io voglio che legga e volessi passarlo 
come num cosa devo fare?

 come num cosa devo fare?
num è numerico. Da quanto mi è parso di capire, gli id su cui lavora lo
script sono così composti "iframe1","iframe2","iframe3" etc. Quindi basta
che tu recuperi la parte numerica da passare a menu_click.
Ma da come è posta, la funzione viene richiamata dal click su di un
elemento. Quindi va visto questo richiamo come viene fatto.


 pensato che quel num fosse un parametro
esisterà lato server ma non lo stai passando al client...come viene
richiamata questa function? nel sorgente che hai postato vedo questa
function ma non come e quando viene chiamata sul client...
-- 
"Ho smesso di fumare.
 Vivrò una settimana di più.
 E in quella settimana pioverà a dirotto"
									    W.A.


ho capito
per cui quel valore Num io ho lo trovo in  menuID
secondo te come posso richiamare il valore?

se serve questo è tutto il sorgente:
var menuFrame=new Array(); currentTab=-1; currentSubTab = 0;
var subTabsLocked = new Array(); //Indica se il tab ammette il passaggio da 
un subtab all'altro
for(i=0;i<menuItem.length;i++){
 subTabsLocked[i] = false;
}
function build_menu() {
  //costruttore del menu principale
    var menuBuilder,bottomBuilder;
  var menuArea=document.all('tabFolder');
  var bottomArea=document.all('tabBottom');
  var menuBody = document.all('tabBody');
  // testo l'esistenza dell'oggetto all (c'è solo in IE)
 if (document.all) {
     menuBuilder = ie_menu(currentTab);    // costruttore del menu 
principale
  bottomBuilder = ie_bottom(currentTab);  // contenitore in basso
  menuArea.innerHTML = menuBuilder;   //
  bottomArea.innerHTML = bottomBuilder;  //
  if (document.all('tdarea')) {
      document.all('tabFolder').style.width=(document.body.clientWidth-20)+"px";
   document.all('tabBody').style.width=(document.body.clientWidth-20)+"px";
      document.all('tdarea').style.height=(document.body.clientHeight-35)+"px";
   } // if
  } //  if
 } // build menu
function ie_menu (thismenu) {
 var builder
 //builder: costruisce la barra di menu principale, indicando il menu 
selezionato (nel caso ci sia)
 var maxRows = 15;
 var init = 0;
 var fine = 0;
 var imgMen = "";
 //gestione delle righe del menu
 if (thismenu <= maxRows) {
  init = menuItem.length;
  fine = 0;
 }else{
  init = 0;
  fine = menuItem.length;
 }
 builder = "<table  border=0 cellspacing=2 cellpadding=0 width='5%'><tr>";
 //for (var i=init; (thismenu<=maxRows&&i>fine)||(thismenu>maxRows&&i<fine); 
(thismenu<=maxRows)?i--:i++) {
 for (var i=0; i<menuItem.length;i++) {
  if (i==maxRows) {
   builder+="</tr></table><table  border=0 cellspacing=1 cellpadding=0 
width=5%>";
  }
  // nel caso thismenu=0 e' l'home page, e non va inserita come voce di menu
  if (i!=0) {
   if (menuImg[i] != ".") {
    //e' possibile associare un'icona al menu
    if (top.showImages) {
     imgMen = "<img src='"+menuImg[i]+"' align='middle' border='0' 
alt=''>";
     } // "&nbsp;" //
    else {
     imgMen = "&nbsp;";
     }
   }else{
    imgMen = "&nbsp;"
   }
   if (thismenu==i) { //menu selezionato
    // imposto l'icona/menu in evidenza
    bottomTab[i] = 1;
    builder+="<td class='noborder' ><table class=men_sel width=100% 
cellspacing=0 cellpadding=0 >";
    builder+="<tr><td class='upleft' width='100'>&nbsp;</td><td height='10' 
class=upright><img src='Images/ANGOLO.GIF' height='10' border='0' 
alt=''></td></tr>";
    builder+="<tr><td class='low' id=menuDefault colspan='2' 
nowrap>"+imgMen+"&nbsp;"+menuItem[i]+"&nbsp;</td></tr>";
    builder+="</table></td>";
   } else { //altri menu
    builder+="<td  class='noborder'><table id='men'"+i+"' class=men_no_sel 
width=100% cellspacing=0 cellpadding=0 onCLick='menu_click("+i+")'>";
    builder+="<tr><td class='upleft' width='100' >&nbsp;</td><td 
class='upright'><img src='Images/ANGOLO.GIF'  height='10' border='0' 
alt=''></td></tr>";
    builder+="<tr><td  class='low_no_sel' colspan='2' 
nowrap>"+imgMen+"&nbsp;"+menuItem[i]+"&nbsp;</td></tr>";
    builder+="</table></td>"
   }
  }
 } // for ..
 builder+="</tr></table>";
  //
 return builder
} // ie_menu
function ie_bottom (thismenu) {
 var bottom
 //bottom:  costruisce l'elenco delle finestre aperte in basso
 bottom = "<table  border=0 cellspacing=2 cellpadding=0 width='5%'><tr>"
 for (var i=0; i < menuItem.length; i++) {
  if (bottomTab[i] == 1){ //menu selezionato
   if (i==thismenu) { //selezionato
    bottom+="<td class=noborder ><table class=men_sel width=100% 
cellspacing=0 cellpadding=0 >";
    bottom+="<tr><td class=low  nowrap>&nbsp;"+menuItem[i]+"&nbsp;</td>";
    bottom+="</table></td>";
   }else{//normale
    bottom+="<td class=noborder ><table id='bot'"+i+"' class=men_no_sel 
width=100% cellspacing=0 cellpadding=0 onCLick='menu_click("+i+")'>";
    bottom+="<tr><td class=low_no_sel 
nowrap>&nbsp;"+menuItem[i]+"&nbsp;</td>";
    bottom+="</table></td>";
   }
  }//if
 } // for ..
 bottom+= "</tr></table>";
  //
 return bottom;
} // ie_bottom
//click su menu principale
function menu_click(num) {
 if (winModal || winLoading) {
  alert("<%("Attendere il termine dell'esecuzione")%>");





// click su uno dei submenu
function sub_menu_click(num,load) {
 //alert(num)
 //alert("è stato cliccato il menu padre nella cella " + currentTab + " di 
menuItem(array delle etichette) e menuID(array dei codici nel DB). subTab[" 
+ currentTab + "] viene ora impostato a " + num + "(codice nel DB del 
sottomenu da caricare) da -1, com'era inizilmente impostato")
 if (winModal || winLoading) {
  alert("<%("Attendere il termine dell'esecuzione")%>");
  return ; //se la finestra e' modale non si fa niente
 }
 if(subTabsLocked[currentTab]&&load){
  alert("<%("Impossibile eseguire questa operazione: prima completare il 
lavoro nella finestra corrente.")%>");
  return;
 }
 //alert("currentTab=" + currentTab)
 subTab[currentTab] = num;
 //alert("subTab[currentTab] vale=" + subTab[currentTab] + " e num valeva " 
+ num )
 //alert("num=" + num + "|load=" + load)
 builder= "<table cellspacing=1 cellpadding=0><tr>" // apertura tabella e 
riga grande
 // menuSubItem e' l'array con tutte le label dei sottomenu
 // lo scorro tutto
 // array dei testi dei sottomenu (tanti elementi quanti i sottotab)
 for (x=0;x<menuSubItem.length;x++){
  // se il padre del sottomenu corrente e' quello selezionato,
  // lo carico (o lo evidenzio)
  // menuItemID = padri relativi al figlio (tanti elementi quanti i 
sottotab)
  // menuID = menu dei padri (tanti elementi quanti i tab)
  if (menuItemID[x]==menuID[currentTab]) {
   /*
   alert("menu " + menuSubItem[x] )
   alert("con padre (ID)= " + menuItemID[x])
   alert("e attuale selezionato (ID)=" + menuID[currentTab] )
   */
   //alert(menuID[currentTab])
   if (subTab[currentTab]==-1) {
    // caso iniziale: va caricato forzato il caricamento
    load = 1; //forzare il caricamento
    subTab[currentTab]=x;
   }
   // se in piu' la voce in esame e' il sottotab cliccato lo evidenzio
   // se l'ID del padre e' zero, non carico la barra dei sottomenu
   if (menuItemID[x]!=0) {
    /*
    alert("x vale=" + x)
    alert("e  subTab[currentTab] vale=" + x)
    */
    if (x==subTab[currentTab]) { //menu selezionato
     currentSubTab = x;
     //alert(x);
     builder+="<td class=sub_on><table cellspacing=0 cellpadding=0 ><tr>" // 
ap. cella grande, tabella e riga piccola
     builder+="<td class=sidesel onCLick='sub_menu_click("+x+")' nowrap> 
<img src='/common/Images/ANGOLO_Sx.GIF' width='20' height='20' border='0' 
alt=''></td>";   // cella piccola
     builder+="<td class=centersel id=menuDefault 
nowrap>&nbsp;"+menuSubItem[x]+"&nbsp;</td>"; // cella piccola
     builder+="<td class=sidesel onCLick='sub_menu_click("+x+")' nowrap> 
<img src='/common/Images/ANGOLO_dx.GIF' width='20' height='20' border='0' 
alt=''></td>";   // cella piccola
     builder+="</tr></table></td>" // chiusura riga e tabella piccola, e 
cella grande
     if ( load == 1) {
       // carico il corpo della funzione
       //alert(menuSubQuery[x])
       //alert(x)
       if (menuSubQuery[x] == "" ) {
        menuFrame[currentTab].src=menuSubURL[x];
       }else{
        if(!menuSubQuery[x]) queryString = "";
        else queryString = menuSubQuery[x];
        menuFrame[currentTab].src=menuSubURL[x]+"?"+queryString;
        menuSubQuery[x] = ""
       }
       //alert(menuFrame[currentTab].src)
       //alert(x)
       //alert(menuFrame[currentTab].src);
     }
     // sotto tab caricato ma non evidenziato
    }else{
     builder+="<td class=sub_off><table id='col"+x+"' cellspacing=0 
cellpadding=0 onCLick='sub_menu_click("+x+",1)'><tr>" // apertura cella 
grande, tabella e riga piccola
     builder+="<td class=side nowrap><img src='/common/Images/ANGOLO_Sx.GIF' 
width='20' height='20' border='0' alt=''></td>";   // cella piccola
     builder+="<td class=center id=menuDefault 
nowrap>&nbsp;"+menuSubItem[x]+"&nbsp;</td>"; // cella piccola
     builder+="<td class=side nowrap><img src='/common/Images/ANGOLO_dx.GIF' 
width='20' height='20' border='0' alt=''></td>";  // cella piccola
     builder+="</tr></table></td>" // chiusura riga e tabella piccola, e 
cella grande
    }
   } else { // caso di padre ID = 0 ovvero la home
     // carico la pagina di home
     if (load== 1)  {
      menuFrame[currentTab].src=menuSubURL[x];
     }
     //alert(menuSubURL[x])
   }
  }
 }
 if (menuID[currentTab]!=0) {
  //inserimento dell'immagine per la chiusura del frame
  // solo però se non e' l'ultimo frame
   builder+="<td width = '100%'>"; // altra cella grande
   builder+="<table width='100%' cellspacing='0' ><tr><td width='100%' 
align='right' ><img id='Help_img' src='/common/Images/exit.gif' width='18' 
border='0' onclick='closeTab();' alt='[!chiudi!]' ></td></tr></table>";
   builder+="</td>";
  // chiusura riga e tabella grande (generale)
  builder+="</tr></table>";
 }
  // riempio il div con i sottomenu
  tabSubFolder.innerHTML = builder;
}//sub_menu_click
function closeTab(){
 if (winModal || winLoading) {
  alert("<%("Attendere il termine dell'esecuzione")%>");
  return ; //se la finestra e' modale non si fa niente
 }
 if (subTabsLocked[currentTab]){
  alert("<%("Impossibile eseguire questa operazione: prima completare il 
lavoro nella finestra corrente.")%>");
  return;
 }
 var newTab = -1;
 bottomTab[currentTab] = 0;
 subTab[currentTab]=-1;
 menuFrame[currentTab].src = ""
 for(x=0;x<bottomTab.length;x++){
  if (bottomTab[x]==1){
   newTab = x;
  }
 }
 if (newTab == -1) {
  newTab =0;
 }
 menu_click(newTab);
} 

 se serve questo è tutto il sorgente:
[snip]
Gli ho dato un'occhiata, e anche aggiungendo qualche pezzo qua e là non si
riesce a farlo girare "stand-alone" per capire cosa non va; ed è scritto in
modo troppo sconfusionato per cavarci qualcosa senza perderci una giornata.
Se non altro, adesso si vede che la funzione menu_click() viene chiamata
dal click su un tag table:
<table id='men'"+i+"' ... onCLick='menu_click("+i+")'>";
Generato sia da ie_bottom() che da ie_menu().
Inoltre, viene invocata anche da closeTab().
Ora, ammesso e concesso che l'errore sia proprio nell'esecuzione di
menu_click (non potendo eseguire il codice, non posso esserne sicuro) in
quali di questi contesti ti capita l'errore? Quando premi su un "menu"
generato da ie_menu o da ie_bottom? Oppure quando esegui closeTab()?
Ricordati inoltre di "separare" il debugging del codice client da quello
server, andando intanto a verificare che l'ASP non generi qualche riga di
codice js "malformed" (basta vedere l'HTML generato sul browser).


 secondo te come posso richiamare il valore?
Non lo so, mi associo a Zer0, occorre studiare questa enormità di codice.
Devi ripulire pian piano il sorgente fino ad arrivare a simulare il
problema con poche righe di codice. Sorry ma proprio non ho tempo di
studiarmi questo codice.
-- 
"Run rabbit run
 dig that hole, forget the sun
 and when at last the work is down
 don't sit down, it's time to dig another one"
									    P.F.