Newsgroup: it.comp.lang.javascript
Titolo: Come si interrompe la propagazione degli eventi di un oggetto Image()

Ciao a tutti,
io istanzio un oggetto Image() in una funzione dove setto gli eventi
onload/.. e sucessivamente lo faccio linkare ad un'immagine
come faccio a interrompere la richiesta dell'immagine e ad evitare la
propagazione degli eventi?
l'unica idea che mi e' venuta e' creare un oggetto globale, fare un bel
delete e controllare come prima cosa negli eventi se l'oggetto esiste
Ciao e grazie

 propagazione degli eventi?
Allora, in attesa che qualcuno voglia darmi altre idee, sto applicando il
seguente approcio:
per richiedere l'immagine e settare gli eventi onload/onerror
utilizzo una funzione tipo img_load( )
e invece per evitare la propagazione degli eventi img_stop( )
img = null;
function img_load( )
{
   img = new Image( );
   img.onload = function( )
   {
      alert( 'onload' );
   }
   img.onerror = function ( )
   {
      alert( 'onerror' );
   }
   img.src = 'my_image.gif';
}
function img_stop( )
{
   if( img )
      img = img.onerror = img.onload = null;
// null e non delete dell'oggetto perche' IE va in errore
}

Ciao, non ho capito bene la domanda...
qual' è l'evento che non dovresti propagare???
in questo caso non vedo propoagazione
Si ha propagazione quando hai ad esempio un onclick definito a  livello
di documento e a livello di un bottone. in questo caso viene chiamato
prima quello del bottone, poi quello della pagina.
Per fermare l'evento quando fai click sul pulsante, nel suo onclick ci
scrivi
window.event.cancelBubble= true;
Spero di averti chiarito!
Ugo ha scritto:


 Spero di averti chiarito!
ok, provo a chiarire quello che intendevo dire:
fome faccio a non far lanciare le funzioni legate agli eventi onload e
onerror che conseguono il caricamento dell'immagine?

 onerror che conseguono il caricamento dell'immagine?
Che, appunto, con la "propagazione" non ha veramente nulla a che vedere, e
direi quasi neppure con gli eventi in sé. :)
Ti sei dimenticato però di fornire un dato essenziale per far si che
qualcuno ti risponda: "In base a cosa, a quale criterio, le funzioni devono
o non devono essere eseguite?"
Inoltre direi che la domanda può essere rivolta in senso generico, non solo
per quanto riguarda le immagini.
-- 
~ "When you have eliminated the impossible, whatever remains,
however improbable, must be the truth." (S.H.)

 o non devono essere eseguite?"
le funzioni devono essere esguite per default, tranne allo scatenarsi di un
evento esterno (o in base a dei miei criteri, diciamo fino la chiamata di
una funzione che poteva essere "img_stop( )" )
Cia'

 una funzione che poteva essere "img_stop( )" )
Come dicevo, io non lo vedrei molto legato alla gestione degli eventi in sé.
Inoltre, dato il criterio generico, la responsabilità la demanderei al
codice stesso associato ai suddetti eventi.
Quindi, o come fai tu semplicemente elimini l'associazione in questione,
oppure imposti una proprietà custom che avvalori nel caso in cui desideri
che le suddette funzioni non vengano eseguite.
Ovviamente all'interno delle stesse, controllerai lo stato di tale
proprietà. Il vantaggio è che così non elimini i riferimenti, che potrebbero
essere utili in un secondo momento (soprattutto se hai un oggetto Image
generico che riutilizzi per più immagini).
Poi tutto dipende dal contesto.
Il tutto premesso che non ho mai avuto esigenze di fare qualcosa del genere.


 Poi tutto dipende dal contesto.
Mi sembra che potrebbe andare nel mio caso...
Pero' ho bisogno di sapere una cosa, se utilizzassi un oggetto globale e
facessi 2 richieste ravvicinate in un intervallo di tempo inferiore a
quello di risposta del server, e' garantito che mi venga scatenato un solo
onload ed e' quello della seconda richiesta?

 onload ed e' quello della seconda richiesta?
Devi fare un po' di prove, dipende tutto da come il singolo browser
implementa tale meccanismo.


 troppe rischi dei problemi con Firefox.
Quindi devo supporre che mi consigleresti di fare una cosa del genere:
un oggetto globale, un'unica definizione degli eventi e in base ad una
variabile "semaforo" cambiare solo la proprieta' src.
Questa variabile dovrebbe essere avvalorata a seguito dell'esecuzione di un
evento e all'interno degli eventi definiti dovrei controllare un'altra
variabile custom che ne permette il proseguo o meno
Piu' o meno intendevi una cosa cosi'? (scommetto che dirai "piu' o meno" :)
Il problema che vedo e' il seguente:
nel caso per qualche motivo, come facevi notare anche tu, non venisse
eseguito nessun evento nonostante sia stata fatta una nuova richiesta, mi
rimarebbe il "semaforo" rosso per le sucessive richieste.
Per tanto suppongo che ci sia qualche locica piu' sicura per "serializzare"
- ora mi rendo conto che alla domanda precedente non risponderai "piu' o
meno" ma piu' probabilmente "non proprio cosi'" :(
In tal caso mi potresti indirizzare?
Grazie tante

 In tal caso mi potresti indirizzare?
Ricerca il thread che ti ho citato nell'altro post, potrebbe esserti d'aiuto
a farti un'idea più chiara delle richieste effettuate tramite oggetto Image.


 a farti un'idea più chiara delle richieste effettuate tramite oggetto Image.
Ok, grazie
Ciao