2009-05-25 10 views
45

¿Es así como define una función en jQuery?¿Es así como defines una función en jQuery?

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

Ahora llamar a la función que hago:

MyBlah('hello'); 
+7

nitpick: no "define una función de jQuery", ya que jQuery es una biblioteca, no el lenguaje. de hecho, ni siquiera califica como marco, es solo una biblioteca. (a _great_ library) – Javier

+0

¿Quizás se refería a un plugin JQuery? –

Respuesta

84

En primer lugar, su código funciona y que es una forma válida de crear una función en Javascript (jQuery a un lado), pero debido a que se está declarando una función dentro de otra función (una anónima en este caso) "MyBlah" no será accesible desde el alcance global.

He aquí un ejemplo:

$(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) 

Ésta es (a veces) un comportamiento deseable ya que no contaminan el espacio de nombres global, así que si su función no tiene por qué ser llamado desde otra parte de su código , Este es el camino a seguir.

Al declararlo fuera de la función anónima, se coloca en el espacio de nombres global y se puede acceder desde cualquier lugar.

Por último, el $ al comienzo del nombre de la variable no es necesaria, y utiliza a veces como una convención jQuery cuando la variable es una instancia del objeto en sí mismo jQuery (no necesariamente en este caso).

Tal vez lo que necesita es la creación de un jQuery plugin, esto es muy muy fácil y útil, así, ya que permitirá que usted pueda hacer algo como esto:

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

Ver también: http://www.re-cycledair.com/creating-jquery-plugins

39

No, simplemente puede escribir la función como:

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

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

Este llama a la función MyBlah en el contenido listo.

-5

Así es como define una función anónima a la que se llama cuando el documento está listo.

+4

Solo para aclarar por qué las personas probablemente votaron negativamente a su respuesta: La función no es anónima ya que está asignada a una variable y, en segundo lugar, la función no se llama cuando el documento está listo ya que solo está asignado, no llamado. –

+0

J.Pablo es correcto: se asigna una función anónima a una variable dentro de un cierre, y en segundo lugar se invoca este cierre cuando el DOM está listo. –

14

Se definen las funciones de la misma manera que lo haría en javascript regular.

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

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

También: No hay necesidad de que el $

8

Puede Extienda el prototipo jQuery y use su función como un método jQuery.

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

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

Más información sobre la extensión de prototipo jQuery aquí: 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; 
    } 
}); 
Cuestiones relacionadas