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

    problema di scope (jquery)

    ciao, ho creato uno script per gestire dei checkbox fatti da me.

    l'idea è che per ogni checkbox si debba creare una nuova istanza della classa SISM.checkbox (sism è l'oggetto che contiene tute le mie classi).

    nella creazione dell'istanza si passa come argomenti un puntatore all'elemto dom e un eventuale callback facoltativo. inoltre volevo che ci fosse una proprietà che immagazzinasse lo stato del checkbox (ceccato o meno)

    questo il codice

    Codice PHP:
    checkbox: function(targetcallback)
        {
                    
    // setta le variabili
            
    var image = $(this).find("img");
            
    this.state false;
            
    checkbox target.find(":input");
            
    target.click( function(e)
            {
                if (
    this.state true){
                                    
    // cambia l'immagine del checkbox
                    
    image.attr('src''/images/CheckFalse.png').css({top"-0.75em"left"0.75em"});
                    
    /*this.state = false;*/ //qui c'è il problema
                                    
                                    // se c'è un input checkbox ne cambia lo stato
                    
    if (checkbox.length){
                        
    checkbox.attr('checked'false);
                    }

                                    
    // se c'è un callback lo esegue
                    
    if (callback){
                        
    callback(false);
                    }
                }
                       
                            
    // fa l'opposto del codice di sopra
                
    else {
                    
    image.attr('src''/images/CheckTrue.png').css({left"1em"top"-0.15em"});
                    
    /*this.state = true;*/
                    
    if (checkbox.length){
                        
    checkbox.attr('checked'true);
                    }
                    if (
    callback){
                        
    callback(true);
                    }
                }
                
    e.stopPropagation();
                
    e.preventDefault();
                return 
    false;
            });
            
            return 
    this;
        }

    // esempio di creazione dell'istanza senza callback
    var sendMail SISM.checkbox($("div.checkbox.sendMail")) 
    Come potete vedere cercavo di modificare la proprietà "state" con this.state = false o true del blocco del click, ma sono reso conto che era una cazzata poiché in questo caso this si riferisce a "target" su cui è chiamata la funzione click.

    La domanda quindi è:
    come faccio a modificare this.state?

  2. #2
    Beh, nessuna idea? è molto importante per me avere un aiuto su questa faccenda.

  3. #3
    Codice PHP:
    checkbox.state false
    anche se non capisco cosa vai facendo

    Without faith, nothing is possible. With it, nothing is impossible
    http://ilwebdifabio.it

  4. #4
    No scusa mi sono spiegato male.
    Volevo modificare la proprietà state dell'oggetto SISM.checkbox. La variabile checkbox all'interno è una variabile locale, ho dimenticato di metterci var davanti.
    lo scopo è che poi si possa usare la proprietà state per verificare lo stato del checkbox.

    Codice PHP:
    var sendMail SISM.checkbox($("div.checkbox.sendMail"))

    if (
    sendMail.state == true){
       
    // fai questo e quello


  5. #5
    Ah, non vi preoccupate, ho risolto:

    Codice PHP:
    checkbox: function(targetcallback)
        {
            var 
    image target.find("img");
                    
                    
    // Creo un puntatore all'oggetto
            
    var self this;

            
    checkbox target.find(":input");
            
    target.click( function(e)
            {        
                if (
    self.state true){
                    
    image.attr('src''/images/CheckFalse.png').css({top"-0.75em"left"0.75em"});

                                    
    // e poi lo uso per modificare this.state anche se sono fuori dallo scope del "this" dell'oggetto
                    
    self.state false;
                    if (
    checkbox.length){
                        
    checkbox.attr('checked'false);
                    }
                    if (
    callback){
                        
    callback(false);
                    }
                }
                else {
                    
    alert("trigger");
                    
    image.attr('src''/images/CheckTrue.png').css({left"1em"top"-0.15em"});
                    
    self.state true;
                    if (
    checkbox.length){
                        
    checkbox.attr('checked'true);
                    }
                    if (
    callback){
                        
    callback(true);
                    }
                }
                
    e.stopPropagation();
                
    e.preventDefault();
                return 
    false;
            });
            
            return 
    this;
        }, 

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.