2009-10-04 7 views
1

J'écris un petit plugin jQuery et jusqu'à présent, j'ai ceci:fonction de liaison jQuery sur le focus

(function($){ 

    $.fn.extend({ 

     someFunction: function() { 
      return this.each(function() { 
       var obj = $(this); 
       obj.focus(someInternalFunction(obj)); 
      }); 
     } 

    }); 

    function someInternalFunction(obj) { 
    }; 

})(jQuery); 

Le problème est, quand j'attache someFunction à l'objet, l'objet se concentrer et la liaison de someInternalFunction sur l'événement focus échoue.

Alors j'ai essayé de lier la fonction d'envelopper l'appel de fonction dans l'autre fonction:

obj.focus(function() { 
    someInternalFunction($(this)); 
}); 

Ce code fonctionne, mais ce n'est pas assez du tout. Est-il possible de lier la fonction sur la mise au point sans l'encapsuler dans l'autre fonction?

Répondre

1
$.fn.bindFocus() = function(){ 
    var internalFunction = function(){ 
     var $this = $(this), 
      self = this; 
     // try do stuff here 
    }; 
    return this.each(function(){ 
     $(this).bind('focus', internalFunction); 
    }); 
} 

$('#myElement').bindFocus(); 

J'espère que ça va aider?

EDT. Désolé, première fois que vous vous méprenez pas :)

+0

Merci , la fonction bind() fonctionne comme un charme. –

1

ici:

obj.focus(someInternalFunction(obj)); 
           ^^^^^ 

... vous êtes appellent la fonction, ce qui signifie que sa valeur de retour est la chose qui se termine effectivement par être passé à focus(). Au lieu de cela, vous voulez passer une fonction à focus(). Compte tenu du fait que vous voulez passer obj à someInternalFunction, vous devez définir une fonction supplémentaire pour envelopper tout:

obj.focus(function(){ 
    someInternalFunction(obj); 
}); 

Juste pour rendre les choses claires:

var x = function() { return 3; }; // Defining a function 

x; // -> this is a function reference 
x(); // -> this is 3 
+0

Oh ... Eh bien ... Parlez d'embarras. Sérieusement, cependant, merci d'avoir signalé mon erreur. Maintenant, je vais essayer de trouver un certain nombre d'excuses sur pourquoi je pensais qu'un appel de fonction était égal à une référence de fonction. –

Questions connexes