Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    conosce l'id del tag onclick

    Ciao a tutti!!

    volevo sapere se è possibile ottenere l'id di un tag generico all'interno di una pagina su cui viene effettuato un click (o comunque si attiva un evento).
    Onestamente so che è possibile configurare gli eventi come discendenti o ascendenti, è possibile intercettarli quando si vuole.
    Però non ho ben chiara la cosa quindi mi rivolgo a voi che sicuramente sarete più ferrati

    Grazie!!
    Lungo le due rive del fiume gelato si stendeva la cupa e tetra foresta di abeti, dai quali il vento aveva appena spazzato il manto di brina. Nella luce crepuscolare quegli abeti neri e sinistri sembravano inclinarsi l'uno verso l'altro. Un silenzio minaccioso incombeva sul paesaggio, privo di qualsiasi segno di vita o di movimento, e desolato e freddo al punto da non poter ispirare che un solo sentimento: quello della più triste malinconia. E nello stesso tempo pareva che da quel paesaggio trapelasse una specie di riso, un riso ben più spaventoso di qualsiasi malinconia o tristezza, un riso tragico, come quello di una sfinge, un riso agghiacciante più della brina e che rammendava l'incombere minaccioso dell'ineluttabile. Era la saggezza potente e impenetrabile dell'eternità che irrideva alla vita, alla sua futilità e agli sforzi degli uomini.

  2. #2
    l'id c'è se tu lo assegni (identificativo univoco) altrimenti non c'è.

    ogni elemento ha comunque "coscenza di se stesso", ovvero se all'onclick assegni un qualcosa tipo:

    onclick="MiaFunzione(this)"

    in mia funzione riceverai esattamente quell'elemento, con parametri, testo, sotto nodi o quelli che ti pare
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  3. #3
    Si, hai ragione, mi sono spiegato male.
    So cos'è l'id e so anche che è possibile piazzare un onclick o un altro evento direttamente sul tag ma in effetti è quello che volevo evitare.
    Mi spiego meglio.

    Fermo restando che l'id lo assegno io (e qui non ci piove), io vorrei ottenere quel determinato id senza definire una funzione per ogni evento direttamente nel tag.
    Cioè voglio evitare una situzione di questo tipo

    Codice PHP:
    <div id="a" onclick="eventoOnClick(this);" onmouseover="eventoOnMouseOver(this);" .... ></div>
    <
    div id="b" onclick="eventoOnClick(this);" onmouseover="eventoOnMouseOver(this);" .... ></div>
    <
    div id="c" onclick="eventoOnClick(this);" onmouseover="eventoOnMouseOver(this);" .... ></div>

    .... 
    Il nuovo gestore degli eventi W3C, simile ma non identico a quello introdotto da IE5 dovrebbe essere in grado di far implementare un codice per funzionalità simile a questo:

    Codice PHP:
    JS -
    document.capture(ALLevento);
    function 
    evento(evt) {
         
    alert(evt.type); // output es. onclick, onload, ecc.
         
    alert(evt.target.id); // output es. a, b, c, ecc.
    }
    JS

    <div id="a"></div>
    <
    div id="b"></div>
    <
    div id="c"></div>
    .... 
    In questo modo un qualsiasi click all'interno della finestra dovrebbe innescare un evento che scende dall'oggetto verso la base finchè non viene catturato.
    In questo caso noi lo catturiamo alla base (a livello document) e li, attraverso gli attributi della variabile evt che viene sempre passata alla funzione utilizzata per la cattura possiamo determinare quello che ci interessa a proposito dell'evento.

    Se mi sono spiegato male o vi sorge qualche dubbio chiedetemi pure

    Grazie!!!
    Lungo le due rive del fiume gelato si stendeva la cupa e tetra foresta di abeti, dai quali il vento aveva appena spazzato il manto di brina. Nella luce crepuscolare quegli abeti neri e sinistri sembravano inclinarsi l'uno verso l'altro. Un silenzio minaccioso incombeva sul paesaggio, privo di qualsiasi segno di vita o di movimento, e desolato e freddo al punto da non poter ispirare che un solo sentimento: quello della più triste malinconia. E nello stesso tempo pareva che da quel paesaggio trapelasse una specie di riso, un riso ben più spaventoso di qualsiasi malinconia o tristezza, un riso tragico, come quello di una sfinge, un riso agghiacciante più della brina e che rammendava l'incombere minaccioso dell'ineluttabile. Era la saggezza potente e impenetrabile dell'eternità che irrideva alla vita, alla sua futilità e agli sforzi degli uomini.

  4. #4
    non so se ho capito ...
    codice:
    onload = function(){
    	for(var	divs = document.getElementsByTagName("DIV"), i = 0, j = divs.length; i < j; i++) {
    		if(/^id\-[0-9]+/.test(divs[i].id))
    			divs[i].onclick = function(evt){
    				var	super = document.getElementById("id-" + (this.id - 1));
    				if(super)
    					super.onclick(evt);
    				// fai quello che devi fare [doStuff]
    			};
    	};
    };
    in questo modo ogni div con id = "id-N", dove N sarà un intero da 0 a quanto vuoi, avrà una funzione onclick ed ognuno di questi, fino al primo che non avrà un div con id--1, richiamerà quella del div precedente.

    In pratica ognuno verifica se c'è un div con id inferiore ed in caso positivo ne richiama il metodo onclick, questo fino al primo che non avrà la condizione verificata.

    E' una cascata al contrario che richiama una cascata ordinata perchè ogni onclick verrà eseguito solo dopo aver eseguito quello del div "sopra".

    In pratica prima scorri la lista verso l'alto, poi dal primo all'ultimo verrà eseguito il codice "doStuff" fino all'ultimo, ovvero quello clickato ...
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  5. #5
    Innanzi tutto ti ringrazio per l'aiuto
    Ma non è quello che volevo
    Cioè, l'esempio che hai fatto funziona.
    Ma è quasi la stessa cosa di impostare l'attributo onX nei tag.
    Solo che lo fai con javascript.

    Comunque ho trovato la soluzione.
    Puoi vederla in funzione qui .

    Naturalmente devi usare un browser compatibile con gli eventi standard di W3C,
    Firefox va più che bene

    Lungo le due rive del fiume gelato si stendeva la cupa e tetra foresta di abeti, dai quali il vento aveva appena spazzato il manto di brina. Nella luce crepuscolare quegli abeti neri e sinistri sembravano inclinarsi l'uno verso l'altro. Un silenzio minaccioso incombeva sul paesaggio, privo di qualsiasi segno di vita o di movimento, e desolato e freddo al punto da non poter ispirare che un solo sentimento: quello della più triste malinconia. E nello stesso tempo pareva che da quel paesaggio trapelasse una specie di riso, un riso ben più spaventoso di qualsiasi malinconia o tristezza, un riso tragico, come quello di una sfinge, un riso agghiacciante più della brina e che rammendava l'incombere minaccioso dell'ineluttabile. Era la saggezza potente e impenetrabile dell'eternità che irrideva alla vita, alla sua futilità e agli sforzi degli uomini.

  6. #6
    Ma è quasi la stessa cosa di impostare l'attributo onX nei tag.
    Solo che lo fai con javascript.
    che è quello che hai fatto tu, hai aggiunto gli eventi onX a tutto il document.

    lo fai anche con qualche piccola modifica al ciclo for che ho postato ... certo non è la stessa cosa, ma fattibile
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  7. #7
    Io non ho aggiunto eventi a tutto il document.
    La cosa è molto differente.
    Non ho bisogno di ciclare e soprattutto se aggiungo con ajax o javascript altri div non c'è bisogno di trovare un sistema per aggiornare gli eventi su quel determinato tag.
    Ti consiglio di leggerti da qualche parte una guida a proposito della gestione eventi w3c. E' molto interessante.

    Lungo le due rive del fiume gelato si stendeva la cupa e tetra foresta di abeti, dai quali il vento aveva appena spazzato il manto di brina. Nella luce crepuscolare quegli abeti neri e sinistri sembravano inclinarsi l'uno verso l'altro. Un silenzio minaccioso incombeva sul paesaggio, privo di qualsiasi segno di vita o di movimento, e desolato e freddo al punto da non poter ispirare che un solo sentimento: quello della più triste malinconia. E nello stesso tempo pareva che da quel paesaggio trapelasse una specie di riso, un riso ben più spaventoso di qualsiasi malinconia o tristezza, un riso tragico, come quello di una sfinge, un riso agghiacciante più della brina e che rammendava l'incombere minaccioso dell'ineluttabile. Era la saggezza potente e impenetrabile dell'eternità che irrideva alla vita, alla sua futilità e agli sforzi degli uomini.

  8. #8
    Originariamente inviato da IroN@xiD
    Io non ho aggiunto eventi a tutto il document.
    al document, quindi ogni elemento richiamerà quella callback ... quindi tutti gli elementi avranno (indirettmente) almeno quella callback come evento (ti dice niente la parola gerarchia del DOM ?)


    Originariamente inviato da IroN@xiD
    La cosa è molto differente.
    infatti ho detto che non è la stessa cosa ma è fattibile.


    Originariamente inviato da IroN@xiD
    Non ho bisogno di ciclare e soprattutto se aggiungo con ajax o javascript altri div non c'è bisogno di trovare un sistema per aggiornare gli eventi su quel determinato tag.
    attenzione che così ogni singolo elemento richiama una callback, ergo il tuo modo è potenzialmente "disastroso"



    Originariamente inviato da IroN@xiD
    Ti consiglio di leggerti da qualche parte una guida a proposito della gestione eventi w3c. E' molto interessante.
    guarda che addEventListener lo uso da svariati anni e gli eventi li implemento su tutti i browsers da altrettanti ... per quanto mi riguarda anche usando ajax o altro basterebbe richiamare una callback all'onload.

    Come ho già detto non è la stessa cosa ma:
    1 - se cicli solo certi elementi (DIV) eviti di bruciare eventi per ogni singolo tag della pagina
    2 - ottieni lo stesso risultato e su tutti i browsers

    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  9. #9
    Originariamente inviato da andr3a
    al document, quindi ogni elemento richiamerà quella callback ... quindi tutti gli elementi avranno (indirettmente) almeno quella callback come evento (ti dice niente la parola gerarchia del DOM ?)
    1 - se cicli solo certi elementi (DIV) eviti di bruciare eventi per ogni singolo tag della pagina
    Ma io credo che normalmente gli eventi vengano comunque generati. Semplicemente non vengono intercettati. Quindi non faccio altro che intercettare l'evento nel document piuttosto che farlo nel div. Anche se non si imposta una callback con l'attributo onload l'evento viene comunque originato quindi sotto il profilo delle prestazioni non credo sia un problema, certo deve richiamare la funzione ed eseguire un check ma non mi pare che questo possa determinare un carico significativo.

    attenzione che così ogni singolo elemento richiama una callback, ergo il tuo modo è potenzialmente "disastroso"
    So che ogni singolo elemento richiama la callback per tutti gli eventi intercettati ma non capisco dove diventa "disatroso", puoi approfondire questa affermazione?

    guarda che addEventListener lo uso da svariati anni e gli eventi li implemento su tutti i browsers da altrettanti ... per quanto mi riguarda anche usando ajax o altro basterebbe richiamare una callback all'onload.
    Si, ho visto che sei un bullo del forum, infatti ho lanciato di proposito il sasso, mi aspettavo una reazione simile
    Comunque è nel mio interesse attenermi strettamente agli standard quindi l'onload non è generato da tutti i tag (secondo gli standard).
    Inoltre, sempre per via della mia strategia di sviluppo, non ha alcuna importanza mantenere la retrocompatibilità o il supporto per browser fuori standard.
    Comunque sono d'accordo con te che volendo mantenere la compatibilità il ciclo sarebbe sicuramente la soluzione migliore

    Poi, sempre per quanto riguarda l'intercettare eventi e poi scartarli (o bruciarli come dici tu) per me non è grave visto che all'interno della mia "interfaccia" pressochè qualsiasi tag genererà eventi.

    Comunque effettivamente quello che voglio realizzare è una cosa molto particolare. Si tratta di un browser-game stile Ultima Online.. sarà un azzardo ma ci vogliamo provare. Anzi, se può interessarti la cosa fammi sapere

    Lungo le due rive del fiume gelato si stendeva la cupa e tetra foresta di abeti, dai quali il vento aveva appena spazzato il manto di brina. Nella luce crepuscolare quegli abeti neri e sinistri sembravano inclinarsi l'uno verso l'altro. Un silenzio minaccioso incombeva sul paesaggio, privo di qualsiasi segno di vita o di movimento, e desolato e freddo al punto da non poter ispirare che un solo sentimento: quello della più triste malinconia. E nello stesso tempo pareva che da quel paesaggio trapelasse una specie di riso, un riso ben più spaventoso di qualsiasi malinconia o tristezza, un riso tragico, come quello di una sfinge, un riso agghiacciante più della brina e che rammendava l'incombere minaccioso dell'ineluttabile. Era la saggezza potente e impenetrabile dell'eternità che irrideva alla vita, alla sua futilità e agli sforzi degli uomini.

  10. #10
    certo deve richiamare la funzione ed eseguire un check ma non mi pare che questo possa determinare un carico significativo.
    potenzialmente perchè se sfrutti un listener per tutti gli elementi e dentro il listener non fai i giusti redirect per ogni elemento rischi di far partire eventi ... insomma non è più semplice da controllare, ovviamente questo singolo caso non ha problemi.

    Per quanto riguarda il gioco se non avete intenzione di supportare tutti i browsers non standard (tutti gli IE per esempio ... quindi la maggiorparte dei browsers in circolazione) dubito avrà successo.

    Esistono tante librerie per implementare metodi ... e sfruttare element.onclick oppure addListener("click") non è che cambi poi molto ma ti permette di rendere il codice più portabile .. quindi più supportato ... quindi più utenti etc etc.

    Quando una strategia di sviluppo non è per una intranet o un'area admin dedicata che richiede l'uso degli standard e ti permette di richiedere quel solo browser allora posso condividere la scelta di scrivere codice standard o scegliere di sviluppare solo JS 1.7 o 2.0 che sia ... ma se il progetto è destinato ai net-gamers trovo ridicolo scegliere di tagliare fuori tutti i browsers non standard (tutti gli IE), tanto vale allora sviluppare il tutto per Flash Player 7 e classi AS 2.0 così da avere un ottimo supporto da parte degli internauti windozziani, linuxiani, macossiani, Solarissiani, etc etc.

    Poi ognuno è libero di azzardare progetti come meglio crede
    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.