Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    254

    visualizzazione compatibilità

    Buona sera,
    premessa:
    mi è difficile postare il codice perchè ci sono di mezzo oggetti e template css.
    Provo a farvi capire il problema attraverso spiegazioni e poche righe di codice e debug vari.

    Acquisisco un
    codice:
    <input type=\"text\" id=\"testo_da_ce\" name=\"txt\">
    attraverso il comando:
    codice:
    document.getElementById("testo_da_ce")
    se faccio un alert dei due risultati (con visualizzazione compatibilità e senza) ottengo:
    [object] e [objectHTMLInputElement].

    Chiaramente il risultato desiderato è [objectHTMLInputElement]!

    Sapete dirmi in prima analisi il motivo della differenza?

    Poi, e so che mi pentirò di aver anticipato questo, se utilizzo lo script desiderato in una pagina pura, problemi non ne ho (anche in visualizzazione compatibilità), ma quando questo script rientra nel gioco di template, script e php della mia applicazione, allora nasce questo problema.

    Cosa ne pensate?

  2. #2
    si capisce poco comunque se hai un alert che fa
    alert( document.getElementById("testo_da_ce") )
    sì, è un oggetto. Dipende dal browser poi come te lo definisce, ma sempre oggetto rimane.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    254
    L'alert lo uso per fare debug sull'oggetto che acquisisco.
    In ogni modo si tratta di uno script per l'autocompletamento di un testo che scrivo in una <input text>.

    Questo è il link da cui ho preso il codice.

    Loro dicono che non funziona il css con versioni di IE precedenti alla 8 ma in realtà a me funziona sia con FF che con IE in visualizzazione compatibilità e senza visualizzazione compatibilità se lo inserisco in una pagina vergine.
    Poi inserito nella mia pagina, che comprende diverse personalizzazioni di style, in visualizzazione compatibilità non funziona il css dei suggerimenti. L'errore è una mancanza dell'oggetto in fase di posizionamento del rettangolo costruito dal css. Per cui facendo vari test ho notato la differenza dell'acquisizione del text nelle due modalità che ho descritto sopra.

  4. #4
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    254
    Dunque io il problema l'ho risolto ma mi rendo conto che il mio template ha un problema in visualizzazione compatibilità.
    L'errore era su questi due cicli che cercavano il posizionamento del rettangolo:

    Codice PHP:

    AutoSuggestControl
    .prototype.getLeft = function () {

        var 
    oNode this.textbox//questa è la variabile che acquisisco e che valutavo 
                                           //con l'alert di cui sopra
        
    var iLeft 0;
        
        while(
    oNode.tagName != "BODY") {
            
    iLeft += oNode.offsetLeft;
            
    oNode oNode.offsetParent;        
        }

        return 
    iLeft;
    };
    AutoSuggestControl.prototype.getTop = function () {


        var 
    oNode this.textbox;
        var 
    iTop 0;

        while(
    oNode.tagName != "BODY") {
            
    iTop += oNode.offsetTop;
            
    oNode oNode.offsetParent;
        }

        return 
    iTop;
    }; 
    In sostanza questi cicli partono dalla posizione dell'input e risalgono fino al body. Quando lo trovano restituiscono il posizionamento left e top.
    Senza visualizzazione compatibilità trova il body e funziona, con la visualizzazione compatibilità il body lo salta.
    Io ho risolto così:
    Codice PHP:

    while((oNode.tagName != "HTML")&&(oNode.tagName != "BODY")) { 
    Così se non trova il BODY trova l'HTML e dunque si ferma in entrambi i modi ed entrambi i posizionamenti sono esatti. Ma mi resta il dubbio sul perchè io visualizzazzione compatibilità non trova il body.
    In ogni modo, anche se non riuscite ad illuminarmi, grazie lo stesso per l'attenzione.
    Buona Giornata

  5. #5
    codice:
    <div style="position:absolute; top:100px; left:101px;">
    <div style="position:absolute; top:100px; left:200px;">
    <input id="foo">
    </div>
    </div>
    
    
    <script>
    
        var oNode =document.getElementById('foo'); //questa è la variabile che acquisisco e che valutavo 
                                          
        var iLeft = 0; 
    
        while(oNode.offsetParent) {
            iLeft += oNode.offsetLeft;
            oNode=oNode.offsetParent;      
        } 
    
    	alert(iLeft)
    </script>
    Nel momento in cui l'offset non fosse presente, iLeft non somma più nulla. La funzione cioè fa qualcosa di un po' azzardato nel porre come condizione del while una circostanza che non chiama in causa l' offsetParent che usa.
    Ad ogni modo, semmai sarebbe stato più congruo
    while(oNode!=document.documentElement) che prescinde dal nome del tag che contiene la intera pagina. Comunque tu usa la funzione sopra while(oNode.offsetParent)

  6. #6
    anzi ti merita mettere tutto in una sola funzione così le evemtuali correzioni le fai una volta sola. Anzichè ritornare un numero (left o top) ritorni una array con entrambi, indice [0] sta il top indice [1] sta il left

    codice:
    <div style="position:absolute; top:100px; left:101px;">
    <div style="position:absolute; top:100px; left:200px;">
    <input id="foo">
    </div>
    </div>
    
    
    <script>
    
    function AutoSuggestControl(){}//<- questo puoi cancellarlo dopo i test
    
    AutoSuggestControl.prototype.getAll=function(oNode){
    var iLeft=0, iTop=0;
        while(oNode.offsetParent) {
        iLeft+=oNode.offsetLeft;  iTop+=oNode.offsetTop; 
        oNode = oNode.offsetParent;        
        }
    return [iTop, iLeft];
    }; 
    
    var boh=new AutoSuggestControl();
    var coords=boh.getAll(document.getElementById('foo'));
    alert('elemento form top='+coords[0]+', elemento form left='+coords[1]);
    
    </script>

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.