2010-08-21 5 views
1

J'essaie d'appeler une fonction de flou sur une variable affectée à un objet jquery (un champ de saisie). Comment appeler la fonction sur la variable?Notation d'objet en Javascript

var someObject = { 
    day: $('#dayInputField'), // input text field 

    init:function(){ 
     console.log("this.day" + this.day); // outputs object 
     this.validateField(); 

    }, 
    validateField : function(){ 

     //this gets triggered - but I need to reference the variable 
     $('#dayInputField').blur(function(){ 
     console.log("This gets triggered"); 
     }; 

     // this doesn't get triggered - how do I target the variable? 

     this.day.blur(function(){ 
     console.log("doesn't work"); 
     }); 



    } 
} 

J'ai aussi essayé -

$(this.day).blur 
$(this).day.blur 
someObject.day.blur 
$(day, this).blur 

Toute aide serait appréciée! grâce

+0

est votre code en cours d'exécution ou après le DOM est prêt? –

+0

C'était à l'extérieur - merci Nick pour votre aide. – Matt

Répondre

1

MISE À JOUR:

Ma réponse précédente était incorrecte, comme vous pouvez propriétés d'accès de votre objet à partir d'une fonction de membre à l'aide this. La situation que je décrivais est différente. Vous ne seriez pas en mesure de le faire, par exemple:

var someObject = { 
    day: 'some value', 
    day2: day 
}; 

Mais le vôtre est bon. En fait, comme noté dans votre commentaire ci-dessous, le problème s'est avéré être que someObject.init() a été appelé de l'extérieur document.ready().


Réponse précédente:

Oui, vous ne pouvez pas se référer à une propriété d'un objet avant que l'objet est initialisé . Vous voudrez peut-être envisager d'utiliser la Module Pattern (alias le modèle Yahoo Module) comme solution:

var someObject = (function() { 
    var day = $('#dayInputField'); 

    return { 
     init: function() { 
     console.log("this.day" + this.day); // outputs object 
     this.validateField(); 
     }, 

     validateField: function() {  

     //this gets triggered - but I need to reference the variable 
     $('#dayInputField').blur(function(){ 
      console.log("This gets triggered"); 
     }; 

     // now this doesn get triggered 
     day.blur(function(){ 
      console.log("it works"); 
     }); 
     } 
    }; 
})(); 

// Use someObject as you were doing before: 
someObject.init(); 
someObject.validateField(); 

Stack Overflow: How can a Javascript object refer to values in itself?

+0

Incroyable. Il était en dehors du document prêt - j'appelais la méthode someObject.init() depuis document.ready. Juste inclus l'objet dans le document prêt, et cela fonctionne parfaitement. Merci pour votre réponse rapide - juste besoin d'un poke dans la bonne direction - et va essayer le modèle de module. Brillant, merci encore. – Matt

+0

@Matt: Content de l'avoir résolu. Notez que ma description précédente était incorrecte. Mis à jour ma réponse pour essayer de corriger le désordre :) ... (Désolé, je ne pensais pas) –

Questions connexes