Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116

    differenze tra oggetto.proprietà e oggetto.getAttribute("proprietà")

    sto provando un po' di codice ed ho visto un po' di differenze tra IE7 e Firefox2 (è normale lo so ), ma purtroppo non ho capito il motivo.

    Nella prova cerco degli elementi, nell'esempio il tag <a, e gli associo l'evento click

    codice:
    var elements = document.getElementsByTagName("a");
    var n = elements.length;
    for(var i = 0; i < n; i++)
    {
    	var element = elements[i];
    	element.setAttribute("id", "a_" + (i+1));
    	element.setAttribute("i", i);
    	element.onclick = function()
    		{
    			alert(this.id + ", " + this.getAttribute("i")); 
    			return false;
    		}
    }
    così funziona sia in IE7, Firefox2 e Opera9.
    se però metto:
    this.id + ", " + this.i

    allora funziona solo con IE7

    il dubbio è :master: perchè posso mettere this.id e non this.i

    In fondo, la sintassi oggetto.proprietà o oggetto.metodo() mi sembra più naturale

    Pietro

  2. #2
    Utente di HTML.it L'avatar di Xinod
    Registrato dal
    Sep 2000
    Messaggi
    13,649
    il punto e' che "i" e' un attributo del tutto arbitrario

    setAttribute('id','quellochevuoi') va a "scrivere" (o a sostituire quanto presente come id) nell' xhtml dell' elemento, come se cambiasse nel markup vero e proprio, e' un attributo valido e richiesto restituisce la stessa cosa come this.id sia come this.getAttribute('id')[*]

    "i" no, lo scrivi a livello di markup dove l' xhtml non permette di avere attributi arbitrari
    e il browser e' libero di restare aderente allo standard oppure comportarsi lascivamente (...tradizionalmente IE...)

    se tu settassi [**] element.i=i
    non dovrebbe dare errore alert(this.i)
    ma chiaramente non vi troveresti quanto atteso in this.getAttribute('i')

    potrei sbagliare ma questo e' quanto credo succeda

    [*]
    per es. il value di input text e' diverso, quello che e' scritto nel markup, che rilevi col getAttribute, e' diverso da quanto rilevi col .value

    [**] e se non vado errato questo genera memory leakage in IE e va ripulito

  3. #3
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Se dicessi di aver capito, direi una bugia



    ps. Ma ti ringrazio della risposta
    Pietro

  4. #4
    Utente di HTML.it L'avatar di Xinod
    Registrato dal
    Sep 2000
    Messaggi
    13,649
    non ti preoccupare, mi saro' spiegato da cani

    es. che almeno esclude dipenda dalle nuove versioni dei browser
    link saluto
    IE6 dice "ciao"
    FFox 1.5.0.8 dice "undefined"
    link saluto
    IE6 dice "ciao"
    FFox 1.5.0.8 dice "ciao"

  5. #5
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Originariamente inviato da Xinod
    non ti preoccupare, mi saro' spiegato da cani

    es. che almeno esclude dipenda dalle nuove versioni dei browser
    link saluto
    IE6 dice "ciao"
    FFox 1.5.0.8 dice "undefined"
    link saluto
    IE6 dice "ciao"
    FFox 1.5.0.8 dice "ciao"
    A dire il vero ti sei spiegato benissimo. Il problema è perchè non ci si mette daccordo per la sintassi

    In fondo, per me è anche preferibile mettere document.id_elemento.proprietà, piuttosto che document.getElementById("xx")....

    Mah! il mio era solo uno sfogo di disappunto Ciao
    Pietro

  6. #6
    Originariamente inviato da pietro09
    A dire il vero ti sei spiegato benissimo. Il problema è perchè non ci si mette daccordo per la sintassi
    chiama Bill Gates e chiediglielo ... è solo IE la capra nera della situazione, gli altri hanno un comportamento standard poichè aderenti.



    Originariamente inviato da pietro09
    In fondo, per me è anche preferibile mettere document.id_elemento.proprietà, piuttosto che document.getElementById("xx")....
    escludendoti la possibilità di avere un elemento con id "form" o altro ancora ... document.nome è ambiguo mentre document.getElementById non è assolutamente ambiguo e l'ambiguità non ha mai giovato nessun linguaggio, che sia scripting o programmazione di basso livello.



    Originariamente inviato da pietro09
    Mah! il mio era solo uno sfogo di disappunto Ciao
    se ci ragioni il tuo disappunto si basa sull'utilizzo di un metodo dedicato per settare attributi riconosciuti come tali per elementi del documento ... quindi sei tu che in questo caso non hai voluto rispettare gli standards tentando di usare un attributo "i" assolutamente arbitrario.

    Quando si sfrutta un elemento per aggiungere proprietà che con l'(x)HTML non c'entrano niente si fa molto prima e si stà molto più tranquilli impostando tali proprietà direttamente sull'elemento tramite JavaScript e non dicendo al browser che da quel momento in poi quell'elemento deve avere un attributo che col markup non c'entra niente ... spero di essermi spiegato



    [edit]
    consiglio anche al lettura di questo 3D fino a pagina 2 http://forum.html.it/forum/showthrea...764&perpage=15
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  7. #7
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Ti sei spiegato, questo è certo.
    Ma, adesso dico fesserie! a me piacerebbe pensare ad un elemento della pagina come ad un oggetto. Con un oggetto io faccio

    var j = {};
    j.nome = "Pietro";

    alert(j.nome);

    e funziona.

    Perchè non si potrebbe fare:

    var j = window.id_textbox;
    j.nuova_proprietà = valore;

    stampa(j.nuova_proprietà);

    --------------------------
    chiudo perchè non voglio dire più sciochezze. Ciao
    Pietro

  8. #8
    Originariamente inviato da pietro09
    Perchè non si potrebbe fare:

    var j = window.id_textbox;
    j.nuova_proprietà = valore;

    stampa(j.nuova_proprietà);
    puoi farlo e come ... infatti ti ho detto che è il modo migliore


    var pippo = document.getElementById("pippo");
    pippo.zio = "pera";
    alert(pippo.zio); // pera
    pippo.mofaiquellochedicoio = function(){
    alert(this.zio);
    };

    pippo.setAttribute("onclick", "this.mofaiquellochedicoio()");

    ... non l'ho testato .. ma spero spieghi ancora meglio quanto detto prima
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

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.