2009-05-25 5 views
45

Est-ce que vous définissez une fonction jQuery?comment vous définissez une fonction jQuery?

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

maintenant appeler la fonction que je fais:

MyBlah('hello'); 
+7

pinailler: vous ne "définir une fonction dans jQuery", puisque jQuery est juste une bibliothèque, pas la langue. en fait, il n'est même pas considéré comme un cadre, c'est juste une bibliothèque. (Une bibliothèque de _great_) – Javier

+0

Peut-être qu'il voulait dire un plugin JQuery? –

Répondre

84

Tout d'abord, vos œuvres de code et qui est un moyen valable de créer une fonction JavaScript (jQuery côté), mais parce que vous déclarez une fonction à l'intérieur d'une autre 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) 

Ceci est (parfois) un comportement souhaitable puisque nous ne pollue pas l'espace de noms global, donc si votre fonction n'a pas besoin d'être appelé d'une autre partie de votre code , c'est le chemin à parcourir.

Déclarant en dehors de la fonction anonyme dans le place 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 lui-même jQuery (pas nécessairement dans ce cas).

Peut-être ce que vous avez besoin est la création d'un jQuery plugin, ce qui est très très facile et utile aussi bien, car il vous permettra de faire quelque chose comme ceci:

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

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

39

Non, vous pouvez simplement écrire la fonction:

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

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

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

-5

Voilà comment vous définissez une fonction anonyme qui est appelée lorsque le document est prêt.

+4

Juste pour clarifier pourquoi les gens ont probablement downvoted votre réponse: La fonction n'est pas anonyme car elle est affectée à une variable et en second lieu, la fonction n'est pas appelée lorsque le document est prêt car il est seulement affecté, pas appelé. –

+0

J.Pablo est correct: une fonction anonyme est affectée à une variable dans une fermeture, et cette seconde est appelée lorsque le DOM est prêt. –

14

No.

Vous définissez les fonctions de la même façon que vous le feriez dans javascript régulier.

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

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

aussi: Il n'y a pas besoin pour le

$
8

Vous pouvez étendez le prototype jQuery et utilisez votre fonction en tant que 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 prototype jQuery ici: http://api.jquery.com/jquery.fn.extend/

0
jQuery.fn.extend({ 
    zigzag: function() { 
     var text = $(this).text(); 
     var zigzagText = ''; 
     var toggle = true; //lower/uppper toggle 
      $.each(text, function(i, nome) { 
       zigzagText += (toggle) ? nome.toUpperCase() : nome.toLowerCase(); 
       toggle = (toggle) ? false : true; 
      }); 
    return zigzagText; 
    } 
}); 
Questions connexes