Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    Riferimento a 'this' e a contatore nei cicli

    ciao,
    ho una classe

    codice:
    function classe() {
      this.proprieta = 'ciao';
    }
    
    classe.prototype.metodo = function() {
      alert(this.proprieta);
    
      $('.a').click(function() {
         alert(this.proprieta);
      });
    
      for(var i = 0; i<100; i++) {
      $('.a').click(function() {
         alert(i);
      });
      }
    };
    all'interno del metodo, il this è correttamente riferito alla classe, all'interno dell'evento click è giustamente riferito all'oggetto cliccato, MA come faccio a riferirmi alla classe?

    Inoltre, cliccando sugli ipotetici a del ciclo ottengo sempre '99' ... ovvero l'ultimo valore della i, non il valore che aveva il contatore nel ciclo .. è possibile ricavarlo sul click?
    Spero di essermi spiegato,
    Grazie,
    Davide
    Davide

  2. #2
    usi jQuery? allora hai scelto l'unica libreria di JS che io conosca che non permette il settaggio dello scope delle funzioni. L'unico sistema che ho trovato è utilizzare l'attributo eventData della funzione bind() per allaccare l'evento con dei parametri:

    codice:
    function classe() {
      this.proprieta = 'ciao';
    }
    
    classe.prototype.metodo = function() {
      alert(this.proprieta);
    
      $('.a').bind('click', {scope : this}, function(e) {
         //Qui this è l'oggetto che lancia l'evento.
         //Per ottenere lo scope esterno all'evento fai
         var prev = e.data.scope;
         alert(prev.proprieta);
      });
    
      for(var i = 0; i<100; i++) {
         //Questo invece è una cosa un pelo diversa. Se tu accedi ad i accederai alla variabile nel momento in cui clicchi sul link, quando è già a 99, devi passargli i dati tramite l'argomento eventData
         $('.a').bind('click', {index : i}, function(e) {
            alert(e.data.index);
         });
      }
    };
    I DON'T Double Click!

  3. #3
    Fi*o!!!
    Grazie mille!
    Davide

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.