51 votes

Est-ce ainsi que l'on définit une fonction dans jQuery ?

Est-ce ainsi que l'on définit une fonction dans jQuery ?

$(document).ready( function () {
    var MyBlah = function($blah) { alert($blah);  };
 });

Maintenant pour appeler la fonction je fais :

MyBlah('hello');

7 votes

Remarque : vous ne pouvez pas "définir une fonction dans jQuery", puisque jQuery n'est qu'une bibliothèque, et non le langage. en fait, il ne peut même pas être qualifié de framework, c'est juste une bibliothèque. (a grand bibliothèque)

0 votes

Peut-être voulait-il dire un plugin JQuery ?

97voto

Pablo Fernandez Points 32003

Tout d'abord, votre code fonctionne et c'est une façon valide de créer une fonction en JavaScript (jQuery mis à part), mais parce que vous déclarez une fonction à l'intérieur d'une autre fonction (une fonction anonyme dans ce cas) "MyBlah" ne sera pas accessible depuis la portée globale.

Voici un exemple :

$(document).ready( function () {

    var MyBlah = function($blah) { alert($blah);  };

    MyBlah("Hello this works") // Inside the anonymous function we are cool.

 });

MyBlah("Oops") //This throws a JavaScript error (MyBlah is not a function)

Il s'agit (parfois) d'un comportement souhaitable puisque nous ne pas polluer l'espace de noms global Si votre fonction n'a pas besoin d'être appelée à partir d'une autre partie de votre code, c'est la meilleure solution.

En le déclarant en dehors de la fonction anonyme, on le place dans l'espace de noms global, et il est accessible de partout.

Enfin, le $ au début du nom de la variable n'est pas nécessaire, et parfois utilisé comme une convention jQuery lorsque la variable est une instance de l'objet jQuery lui-même (pas nécessairement dans ce cas).

Peut-être que ce dont vous avez besoin est de créer un plugin jQuery Il s'agit d'une solution très simple et utile, car elle vous permettra de faire quelque chose comme ceci :

$('div#message').myBlah("hello")

Voir aussi : http://www.re-cycledair.com/creating-jquery-plugins

45voto

gehsekky Points 1287

Non, vous pouvez simplement écrire la fonction comme :

$(document).ready(function() {
    MyBlah("hello");
});

function MyBlah(blah) {
    alert(blah);
}

Cela appelle la fonction MyBlah sur le contenu prêt.

16voto

Dmitri Farkov Points 3743

Non.

Vous définissez les fonctions exactement de la même manière que vous le feriez en javascript normal.

//document ready
$(function(){
    myBlah();
})

var myBlah = function(blah){
    alert(blah);
}

Aussi : Il n'y a pas besoin de l'argent

8voto

x500 Points 65

Vous pouvez étendre le prototype jQuery et utiliser votre fonction comme une méthode jQuery.

(function($)
{
    $.fn.MyBlah = function(blah)
    {
        $(this).addClass(blah);
        console.log('blah class added');
    };
})(jQuery);

jQuery(document).ready(function($)
{
    $('#blahElementId').MyBlah('newClass');
});

Plus d'informations sur l'extension du prototype jQuery ici : http://api.jquery.com/jquery.fn.extend/

-6voto

Pablo Points 44881

C'est ainsi que vous définissez une fonction anonyme qui est appelée lorsque le document est prêt.

4 votes

Juste pour clarifier pourquoi les gens ont probablement rétrogradé votre réponse : La fonction n'est pas anonyme car elle est assignée à une variable et deuxièmement, la fonction n'est pas appelée lorsque le document est prêt car elle est seulement assignée, pas appelée.

0 votes

J.Pablo a raison : une fonction anonyme est assignée à une variable dans une fermeture, et ensuite cette fermeture est invoquée lorsque le DOM est prêt.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X