propias - Cómo ejecutar una función en jquery
llamar funcion jquery onclick (6)
Soy un novato en programación, y no puedo entender cómo almacenar una función en JQuery y ejecutarla en varios lugares.
Yo tengo:
$(function () {
$("div.class").click(function(){
//Doo something
});
$("div.secondclass").click(function(){
//Doo something
});
});
Ahora los 2 "// Doo algo" son lo mismo, y no quiero volver a escribir el mismo código.
Si pongo:
$(function () {
function doosomething ()
{
//Doo something
}
$("div.class").click(doosomething);
$("div.secondclass").click(doosomething);
});
Eso ejecutaría la función en carga de página, en lugar de solo cuando haga clic.
¿Cómo hago esto correctamente?
¡Gracias!
¿Es esta la solución más ofuscada posible? No creo que la idea de jQuery fuera crear código como este. También existe la presunción de que no queremos crear eventos, lo que probablemente sea incorrecto.
El desplazamiento simple doosomething()
fuera de $(function(){}
hará que tenga un alcance global y mantendrá el código simple / legible.
Alternativamente (yo diría que preferiblemente), puedes hacerlo así:
$(function () {
$("div.class, div.secondclass").click(function(){
//Doo something
});
});
Lo haría de esta manera:
(function($) {
jQuery.fn.doSomething = function() {
return this.each(function() {
var $this = $(this);
$this.click(function(event) {
event.preventDefault();
// Your function goes here
});
});
};
})(jQuery);
Luego, en el documento listo, puedes hacer cosas como esta:
$(document).ready(function() {
$(''#div1'').doSomething();
$(''#div2'').doSomething();
});
Lo siguiente debería funcionar bien.
$(function() {
// Way 1
function doosomething()
{
//Doo something
}
// Way 2, equivalent to Way 1
var doosomething = function() {
// Doo something
}
$("div.class").click(doosomething);
$("div.secondclass").click(doosomething);
});
Básicamente, usted está declarando su función en el mismo ámbito que la que está usando (JavaScript utiliza Closures para determinar el alcance).
Ahora, dado que las funciones en JavaScript se comportan como cualquier otro objeto, simplemente puede asignar doosomething
como la función para invocar el clic utilizando .click(doosomething);
Su función no se ejecutará hasta que la llame utilizando doosomething()
(hacer doosomething
sin ()
hace referencia a la función pero no la llama) o llama a otra función (en este caso, el controlador de click
).
También puede hacer esto: dado que desea que una función se use en todas partes, puede hacerlo llamando directamente a JqueryObject.function (). Por ejemplo, si desea crear su propia función para manipular cualquier CSS en un elemento:
jQuery.fn.doSomething = function () {
this.css("position","absolute");
return this;
}
Y la forma de llamarlo:
$("#someRandomDiv").doSomething();
function doosomething ()
{
//Doo something
}
$(function () {
$("div.class").click(doosomething);
$("div.secondclass").click(doosomething);
});