2013-09-25 13 views
5

Ci scusiamo per il mio inglese. Ecco codice di esempio:Come accedere alla proprietà dell'oggetto all'interno della funzione evento jQuery

/** 
* @constructor 
*/ 
function MyNewClass(){ 
    this.$my_new_button = $('<button>Button</button>'); 
    this.my_value = 5; 

    this.init = function(){ 
    $('body').append(this.$my_new_button); 
    this.$my_new_button.click(
     function(){ 
     // Its always alerts "undefined" 
     alert(this.my_value); 
     } 
    ) 
    } 
} 

Come posso accedere agli oggetti my_value proprietà all'interno di jQuery clicca funzione di evento? È possibile?

risposta

6

È possibile effettuare le seguenti

function MyNewClass(){ 
    this.$my_new_button = $('<button>Button</button>'); 
    this.my_value = 5; 
    var self = this; //add in a reference to this 
    this.init = function(){ 
     $('body').append(this.$my_new_button); 
     this.$my_new_button.click(
      function(){ 
       //This will now alert 5. 
       alert(self.my_value); 
      } 
     ); 
    }; 
} 

Questo è un piccolo modello in javascript (anche se il nome mi sfugge). Ti consente di accedere ai membri di livello superiore di una funzione all'interno di una funzione interna. In una funzione annidata non è possibile utilizzare "questo" per riferirsi ai membri di livello superiore in quanto si riferirà solo alla funzione che si sta all'interno. da qui la necessità di dichiarare il livello superiore funzioni "questo" valore nella propria variabile (chiamato auto in questo caso).

4

Jquery ha un metodo per questo, jQuery.proxy(function, context):

function MyNewClass(){ 
    this.$my_new_button = $('<button>Button</button>'); 
    this.my_value = 5; 

    this.init = function(){ 
    $('body').append(this.$my_new_button); 
    this.$my_new_button.click(
     $.proxy(function(){ 
     // Its always alerts "undefined" 
     alert(this.my_value); 
     },this) 
    ) 
    } 
} 

DEMO

Problemi correlati