Tengo un complemento JQuery y quiero agregarle algún evento. ¿Alguna ayuda, consejo o tutorial?
Según entiendo correctamente, si tiene algún tipo de botón que cierra la ventana emergente y necesita una función que se active 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 pasa el evento desde el evento de clic.
$('#someId').somePlugin({ onAfterClose: function(e) { alert('after close'); } });En su complemento jquery, lo primero que tendrá que hacer es activar su evento personalizado en algún lugar del código de su complemento:
$("#someElement").trigger("someSpecialEvent");
También puede pasar datos dentro de su función de activación si lo desea.
$("#someElement").trigger("someSpecialEvent", "this does not need to be a string");A continuación, cree un controlador de eventos en otro lugar de su código de complemento 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. });Luego puede permitir que un usuario pase una función de devolución de llamada como una opción como esta:
$("#sampleElement").myPlugin({ someEvent: function() { //user logic } });Finalmente, dentro del código de su 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(); }); }jQuery docs tiene todo sobre la activación de un evento
Cualquier elemento que se haya adjuntado a un evento mediante $.bind() recibirá una notificación de que el evento se ha activado y ejecutará su código.
Ejemplo:
$(document).trigger('my.event'); jQuery admite eventos de 'espacio de nombres', por lo que puede nombrar el evento como mypluginName.eventName para asegurarse de que ningún otro complemento interfiera con sus eventos;)
Simple y limpio, aunque tenga cuidado, los documentos afirman que:
Aunque .trigger() simula la activación de un evento, completo con un objeto de evento sintetizado, no replica perfectamente un evento que ocurre naturalmente.
Lindo día