Newsgroup: it.comp.lang.javascript
Titolo: Eventi in serie

Devo fare due eventi in serie: prima A poi B ma non riesco a far rispettare
la precedenza di A su B. Il codice è di questo tipo:
<a href="javascript:eventoA();eventoB();">
  <img src="images/zoomto.gif" border="0">
</a>
In pratica cliccando sul link prima si verifica l'evento B
poi l'evento A. Io ho la necessità che B venga fatto solamente al termine
completo di A.
Grazie, ciao.

 completo di A.
restituisci dalla function eventoA() un true/false e metti un
 if(eventoA()) eventoB(); questo in generale perché dipende dall'evento di
cui parli...
-- 
"Non sai che ci vuol scienza
 ci vuol costanza
 ad invecchiare senza maturità"
									    F.G.

 cui parli...
L'evento A mi ricarica un frame della pagina... è di questo tipo:
function zoom2extentdue(layer,idx,geoextent) 
  {
    if (layer == 0 && idx == 0) 
      {                            // no
        var layerstring = '';
      } 
    else 
      {
        var layerstring = '&resultlayer='+layer+'+'+idx;     // yes
      }      
    var mapurl =
'map.phtml?'+SID+'&mode=map&zoom_type=zoomextent&extent='+geoextent+layerstring;
    top.varFrame.document.varform.zoomselected.value = '1';
    top.mapFrame.location = mapurl;
  }
L'evento B dovrebbe disegnare delle line sul frame rigenerato.
Non sono molto pratico di9 javascript dici che una cosa di questo genere va
bene:
function zoom2extentdue(layer,idx,geoextent) 
  {
    if (layer == 0 && idx == 0) 
      {                            // no
        var layerstring = '';
      } 
    else 
      {
        var layerstring = '&resultlayer='+layer+'+'+idx;     // yes
      }      
    var mapurl =
'map.phtml?'+SID+'&mode=map&zoom_type=zoomextent&extent='+geoextent+layerstring;
    top.varFrame.document.varform.zoomselected.value = '1';
    top.mapFrame.location = mapurl;
    return true;
  }
....
<a href="javascript:zoom2extentdue('Condotte',$id,'$link_zoom'); if
(zoom2extentdue) eventoB();">
 <img src=\"images/zoomto.gif\" border=\"0\">
</a>
Ciao e grazie.
 

 ha scritto:

Senza entrare nei dettagli (non capisco il perche' del comportamento da te
descritto), cosi' dovrebbe funzionare:
<a href="#" onclick="return fai()">
  <img src="images/zoomto.gif" border="0">
</a>
avendo definito la funzione
function fai() {
  eventoA();
  eventoB();
  return false;
  }
Ad ogni modo, hai fatto un test per verificare che la funzione eventoA(),
*da sola*, faccia quello che deve?
-- 
Nando [?]
Ex-Apostolo della Ex-Prova

 L'evento A mi ricarica un frame della pagina... è di questo tipo:
Ahia ... come fai a sapere che il frame è completamente caricato per
disegnarci dentro?
Cambierei logica: apri il frame e window.onload del frame esegui la
function b. quindi eseguirai la tua zoom2extentdue(layer,idx,geoextent)
e nel frame
window.onload=function()
{top.frames['nomedeltuoframechehascatenatozoom2extentdue'].eventoB();}
-- 
"Voi abili a tenere sempre un piede qua e uno là
 avrete un avvenire certo in questo mondo qua
 però la dignità
 dove l'avete persa?"
									    V.R.

 {top.frames['nomedeltuoframechehascatenatozoom2extentdue'].eventoB();}
Il problema è che l'evntoB(), cioè il disegnare delle line nel frame (che si
chiama mapFrame) deve accadere solamente se clicco su quel tasto 
<a...> </a>
di prima...
Ci sono altre situazioni, altri tasti, che in pratica fanno il refresh del
mapFrame, ma in quei casi non deve verificarsi eventoB()! 

 mapFrame, ma in quei casi non deve verificarsi eventoB()!
passa all'href del frame B una querystring e valuta quella, del tipo
tuapagina.htm?Disegna
e window.onload
if(window.location.search.substr(1).toUpperCase()=='DISEGNA') esegui...
-- 
"Affacciati affacciati benedici, guardaci
 guardaci...guardaci!
 Tanto sono quasi duemila anni che stai a guardare!"
									    E.B.

 if(window.location.search.substr(1).toUpperCase()=='DISEGNA') esegui...
OK, grazie mille!