2011-02-09 9 views
16

Tengo un plugin JQuery y quiero agregarle algún evento. ¿Alguna ayuda, consejos o tutorial?agregar evento a Jquery Plugin

+0

http://stackoverflow.com/questions/319264/jquery-plugin-handling-events –

+0

Uhm, lo plugin? No podemos responder algo si no sabemos de qué se trata ... –

+0

@ Anriëtte Combrink: es un plugin emergente y quiero hacer algo después de que se cierre. [Enlace] (http://yensdesign.com/2008/09/how-to-create-a-stunning-and-smooth-popup-using-jquery/) – Raika

Respuesta

28

Como tengo entendido correctamente Si tiene algún tipo de botón que cierra la ventana emergente y necesita una función que se activa después de cerrar.

(function($) { 
    $.fn.somePlugin = function(options) { 
    // do some stuff with popup 
    $('#closeButton').click(function(e) { 
     //close popup 
     if (options.onAfterClose !== undefined) { 
     options.onAfterClose(e); 
     } 
    }); 
    }; 
})(jQuery); 

simplemente pase el evento de click.

$('#someId').somePlugin({ 
    onAfterClose: function(e) { 
     alert('after close'); 
    } 
}); 
+0

Tengo una estructura de plugin similar, excepto que estoy configurando hasta 'e' tiene ciertos valores que deben pasarse como parámetros, pero siempre aparece como nulo.Entonces no hay parámetros! ¿Algunas ideas? – Jacques

+0

@Jacques deberías hacer una pregunta y mostrar tu código. – jcubic

+0

logró ser ordenado. Tiene que ver con el uso de .call en Javascript donde el primer parámetro aprobado debe ser 'this' como en onChange.call (esto, entonces Parámetros) – Jacques

2

jQuery docs has everything about triggering an event

Cualquier elemento que se ha unido a un evento usando $.bind() será notificado de que el evento había sido disparada y ejecutar su código.

Ejemplo:

$(document).trigger('my.event'); 

jQuery soporta eventos 'de espacios de nombres', por lo que puede nombrar el caso de que algo como mypluginName.eventName para asegurarse de que ningún otro complemento interfiere con ustedes los eventos;)

simple y limpia, aunque tener cuidado, docs afirman que:

Aunque .trigger() simula una activación de eventos , completa con un objeto de evento sintetizado, no replica perfectamente un evento natural .

buen día

17

En su plugin jQuery, lo primero que tendrá que hacer es activar el evento personalizado en algún lugar de su código de plugin:

$ ("# someElement"). trigger ("someSpecialEvent");

También puede pasar datos dentro de la función de disparo si lo desea.

$("#someElement").trigger("someSpecialEvent", "this does not need to be a string"); 

A continuación, cree un controlador de eventos en otra parte de su código de plug-in para su evento personalizado:

$("#someElement").bind("someSpecialEvent", function(event, data) { 
    //If you had passed anything in your trigger function, you can grab it using the second parameter in the callback function. 
}); 

A continuación, puede permitir que un usuario pasa una función de devolución de llamada como una opción como esta:

$("#sampleElement").myPlugin({ 
    someEvent: function() { 
     //user logic 
    } 
}); 

Finalmente, dentro de su código de complemento, puede llamar a la función del usuario de diferentes maneras. Un ejemplo sería:

$.fn.samplePlugin = function(options) { 
     options = $.extend({}, $.fn.samplePlugin.options, options); 
     $("sampleElement").bind("specialEvent", function() { 
      options.someEvent.call(); 
     }); 
}