Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Frontend samurai L'avatar di fcaldera
    Registrato dal
    Feb 2003
    Messaggi
    12,924

    problema istruzioni asincrone?

    ciao a tutti, volevo capire una cosa su questo codice:

    codice:
        function getElements(doc, element, attribute) {
            
            this_doc = doc;
            
            array_elements = this_doc.getElementsByTagName(element);       
            
            for (i=0; i<array_elements.length; i++) {
                this_element = eval("array_elements["+i+"]."+attribute);
                alert(this_element);
            }
            
        }
    La funzione prende rispettivamente come argomenti un riferimento all'oggetto document, un elemento e un attributo ad es.
    codice:
    getElements(document, 'a', 'href');
    mi consente di vedere quanti links sono presenti nella pagina. Il problema è che il codice non fa l'alert dei vari link (ce ne sono cinque) a meno che non metta un qualsiasi alert subito prima del ciclo for, cioè così

    codice:
    ...
            array_elements = this_doc.getElementsByTagName(element);       
            alert("qualsiasi cosa");
            for (i=0; i<array_elements.length; i++) {
    ...
    Ovvero sembra che quando faccio la scansione dell'array degi elementi l'istruzione precedente non sia - per così dire - terminata probabilmente per via del fatto che in js le istruzioni sono asincrone.

    - Ho provato a costruire una funzione che faccia una pausa al posto dell'alert ma il problema non si risolve.
    - Ho provato a usare un costrutto del tipo

    codice:
    do  {
     array_elements = this_doc.getElementsByTagName(element);  
    while (array_elements == undefined)
    ma niente.


    Qualcuno ha idea di come risolvere questo problema?

    Ciao
    Vuoi aiutare la riforestazione responsabile?

    Iscriviti a Ecologi e inizia a rimuovere la tua impronta ecologica (30 alberi extra usando il referral)

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Ho l'impressione che sia l'eval() a dare problemi.

    Come sai e` deprecato, e qualche browser potrebbe non supportarlo piu` (o supportarlo solo in parte).

    Pero` mi pare che si possa fare anche senza:
    codice:
    function getElements(doc, element, attribute) {
            
      var array_elements = doc.getElementsByTagName(element);       
            
      for (var i=0; i<array_elements.length; i++) {
        var this_attr = array_elements["+i+"].getAttributes(attribute);
        alert(this_attr);
      }
    }
    Non sono sicuro della sintassi (non la ho mai usata), ma se faiuna ricerca dentro questo forum dovresti trovare degli esempi
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  3. #3
    Frontend samurai L'avatar di fcaldera
    Registrato dal
    Feb 2003
    Messaggi
    12,924
    avrei risolto così


    codice:
        
        function getElements(doc, element, attribute) {
            
            this_doc = doc;
            array_elements = this_doc.getElementsByTagName(element);  
            
            this.scanArray = function() {
                for (i=0; i<array_elements.length; i++) {
                    this_element = eval("array_elements["+i+"]."+attribute);
                    alert(this_element);
                }
            }
                
            setTimeout('this.scanArray()', 1);
        }
    Facendo qualche test ho notato che basta un millisecondo di attesa e tutto funziona
    Vuoi aiutare la riforestazione responsabile?

    Iscriviti a Ecologi e inizia a rimuovere la tua impronta ecologica (30 alberi extra usando il referral)

  4. #4
    Frontend samurai L'avatar di fcaldera
    Registrato dal
    Feb 2003
    Messaggi
    12,924
    Purtroppo mich la soluzione che mi hai proposto pur non avendo errori di sintassi non funziona, ovvero non succede nulla come nel primo post, cmq ti ringrazio lo stesso.
    Vuoi aiutare la riforestazione responsabile?

    Iscriviti a Ecologi e inizia a rimuovere la tua impronta ecologica (30 alberi extra usando il referral)

  5. #5
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Ho provato il tuo codice e mi funziona in IE6 e Firefox, Window Xp SP2

    Comunque, l'uso di setTimeout come hai fatto tu, lo uso sempre (basta 1 millisecondo) in tantissimi casi e risolve bene tanti strani comportamenti di IE

    Pietro

  6. #6
    Frontend samurai L'avatar di fcaldera
    Registrato dal
    Feb 2003
    Messaggi
    12,924
    a dir la verità a me basta che funzioni solo su firefox 1.5 e lo sto testando solo li. cmq ho risolto.
    Vuoi aiutare la riforestazione responsabile?

    Iscriviti a Ecologi e inizia a rimuovere la tua impronta ecologica (30 alberi extra usando il referral)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.