Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2005
    Messaggi
    98

    Sapere che elemento ha generato un evento

    ciao a tutti!

    Domanda facile facile: come posso sapere che elemento ha generato un evento? Mi spiego meglio. Ho un elemento che all'onclick richiama la funzione prova(); Come posso all'interno di questa funzione ricavare l'id dell'elemto che ha generato l'evento? Io ora chiamo la funzione passanto l'id: prova(this.id); ma vorrei eliminare quel 'this.id'. Si può fare vero?

    Grazie a tutti.

  2. #2
    Utente di HTML.it L'avatar di Xinod
    Registrato dal
    Sep 2000
    Messaggi
    13,649
    dipende, puo' non essere facile
    se per esempio il gestore evento e' nel markup non puoi,
    devi necessariamente passare qualcosa
    <span id="id_span" onclick="funzione(this)">click me</span>
    dove
    codice:
    function funzione(chi){
      alert(chi.id);
    }
    che chiaramente non cambia molto dal passare direttamente this.id

    l' alternativa e' sfruttare l' oggetto event
    <span id="id_span" onclick="funzione()">click me</span>
    dove
    codice:
    function funzione(){
      alert(window.event.srcElement.id);
    }
    ma funzionerebbe solo con explorer/opera dove l' oggetto evento si propaga automaticamente a livello di window,
    in una versione crossbrowser ti serve
    <span id="id_span" onclick="funzione(event)">click me</span>
    dove
    codice:
    function funzione(e){
      if(!e)e=window.event;
      var src=e.target?e.target:e.srcElement;
      alert(src.id);
    }
    e anche qui qualcosa la devi passare

    se il gestore evento e' settato brutalmente via javascript
    (brutalmente vuol dire che sovrascrive eventuale stesso gestore evento gia' presente per l' elemento) un this interno alla funzione si riferisce sempre all' elemento che ha richiamato la stessa
    codice:
    function funzione(){
      alert(this.id);
    }
    window.onload=function(){
    	var el=document.getElementById('id_span');
    	el.onclick=funzione;
    }
    <span id="id_span">click me</span>

    o, per sfruttare l' oggetto event, che viene automaticamente passato come primo argomento della funzione, tanto nel settaggio brutale
    codice:
    function funzione(e){
      if(!e)e=window.event;
      var src=e.target?e.target:e.srcElement;
      alert(src.id);
    }
    window.onload=function(){
    	var el=document.getElementById('id_span');
    	el.onclick=funzione;
    }
    quanto in quello con addEventListener/attachEvent
    codice:
    function funzione(e){
      if(!e)e=window.event;
      var src=e.target?e.target:e.srcElement;
      alert(src.id);
    }
    window.onload=function(){
    	var el=document.getElementById('id_span');
    	if(el.addEventListener) el.addEventListener('click', funzione, false);
    	else if(el.attachEvent) el.attachEvent('onclick',funzione);
    }
    <span id="id_span" onclick="alert('onclick precedente')">click me</span>

    per ora mi fermo qui, perche' il caso che ho omesso (this in addEventListener/attachEvent) complica non poco la questione
    ciao

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 © 2026 vBulletin Solutions, Inc. All rights reserved.