Esta pregunta está semi relacionada con Wordpress, pero tiene aplicaciones en otros lugares. Básicamente, intento que cuando alguien salga de Thickbox, desencadene un evento en otro lugar de la página. Editar el archivo Thickbox no es una opción.¿Cómo desencadenarías un evento cuando se cierre un ThickBox?
Respuesta
Es un poco complicado ya que Thickbox no está escrito de esa manera. Pero tal vez puedas usar algunos trucos para hacerlo.
No es la solución recomendada, pero puede "reescribir" la función de cierre. Algo así como:
var old_tb_remove = window.tb_remove;
var tb_remove = function() {
old_tb_remove(); // calls the tb_remove() of the Thickbox plugin
alert('ohai');
};
Works \ o/http://jsfiddle.net/8q2JK/1/
I que se puede hackear que mediante la unión de un controlador de clic en el botón de cierre:
$("#TB_closeWindowButton").click(function() {
doSomething();
});
Si usted tiene una opción, deshacerse de thickbox (ya que no se mantiene) y usar algo con una comunidad más activa. El sitio thickbox, de hecho, proposes some alternativesmirror.
Pensé en decirle eso, pero tendría que volver a vincular todos los elementos utilizados para cerrar la caja gruesa (el botón Cerrar, el clic en la plantilla y la tecla espaciada) –
pero +1 en las alternativas :) –
Ah - Debería haberlo visto. En caso de que sea de interés, obtuve la idea de hacer clic en el botón Cerrar desde aquí: http: // designerfoo.com/jquery-thickbox-hack-to-refresh-parent-window-on-tb_close-event.html – karim79
Puede enlazar un oyente con el "tb_unload" que se activa cuando se cierra el thickbox. Ejemplo usando jQuery:
<input id="tb_button" type="button" value="Click to open thickbox" />
jQuery('#tb_button').on('click', function(){
tb_show('This is Google in a thickbox', 'http://www.google.com?TB_iframe=true');
jQuery('#TB_window').on("tb_unload", function(){
alert('Triggered!');
});
}
Esta es en realidad una gran respuesta. Pero, tb_unload no es una función en el código fuente apuntado a la página de inicio de thickbox. Pero está en la versión de WordPress. Señalar esto podría ayudar. Además, es un elemento 'a' para desencadenar thickbox, no un elemento de entrada. Finalmente, el ejemplo no funciona, ya que Google prohíbe que se cargue de esta forma.tb_unload event. Tal vez un ejemplo jsfiddle o codepen. –
En Thickbox 3.1, voy a entrar en el interior Thickbox-fixed.js y añadirá una función personalizada para mí
sólo para añadir una función de devolución de llamada, no estoy seguro es un buen manera, pero es trabajo para mi proyecto.
function mycustom_tb_remove(callback) {
$("#TB_imageOff").unbind("click");
$("#TB_closeWindowButton").unbind("click");
$("#TB_window").fadeOut("fast",function(){
if(callback)callback();
$('#TB_window,#TB_overlay,#TB_HideSelect').trigger("unload").unbind().remove();
});
$("#TB_load").remove();
if (typeof document.body.style.maxHeight == "undefined") {//if IE 6
$("body","html").css({height: "auto", width: "auto"});
$("html").css("overflow","");
}
document.onkeydown = "";
document.onkeyup = "";
return false;
}
Cuando uso la función de eliminación personalizada. Lo usaré de esta manera.
self.parent.mycustom_tb_remove(function(){
alert("Closed");
});
Usted puede intentar algo como esto ...
var tb_unload_count = 1;
$(window).bind('tb_unload', function() {
if (tb_unload_count > 1) {
tb_unload_count = 1;
} else {
// do something here
tb_unload_count = tb_unload_count + 1;
}
});
tb_unload
se dispara dos veces por lo que este incluye un poco de un truco para asegurarse de que su código no se ejecuta la segunda vez.
- 1. Cómo generar un evento cuando se cambia DataGrid.ItemsSource
- 2. Incendiar un evento cuando se recibe un correo electrónico
- 3. ¿Qué evento se dispara cuando se muestra un UserControl?
- 4. jQuery: ¿Cómo puedo activar un evento cuando aparece un div?
- 5. Cómo disparo un evento cuando se produce un clic fuera de un cuadro de diálogo
- 6. ¿Cómo puede un servicio de Windows iniciar un proceso cuando se produce un evento de temporizador?
- 7. La captura de evento cuando se sigue un enlace
- 8. ¿Cómo puedo plantear un evento (jQuery o Javascript vainilla) cuando se cierra una ventana emergente?
- 9. XmlReader - ¿Elemento de cierre automático no desencadena un evento EndElement?
- 10. jqGrid: ¿hay un evento para cuando las columnas se reordenan?
- 11. ¿Hay un evento del sistema cuando se crean procesos?
- 12. ¿Hay un evento activado cuando dte.Solution.SolutionBuild.StartupProjects cambia?
- 13. Para invocar thickbox usando javascript
- 14. ¿Cómo se puede reutilizar un threadpool después del cierre
- 15. Extensión de Chrome: ¿se activa un evento cuando se crea un elemento?
- 16. ¿Hay un evento que se activa cuando se ha establecido un enlace en una propiedad?
- 17. Cierre con gracia un hilo
- 18. Hace un control de Winforms generar un evento cuando se agrega a un formulario
- 19. jQuery - Evento para cuando un atributo de un nodo cambia
- 20. Evitar que un QMenu se cierre cuando se activa una de sus QAction
- 21. C# provocar un evento cuando un nuevo proceso comienza
- 22. ShowDialog en el evento de cierre
- 23. ¿Cómo puedo serializar un cierre en Perl?
- 24. ¿Cómo se crea un evento cancelable en vb.net
- 25. Evento cuando se cambia la tarjeta SIM
- 26. Evento cuando una página web se enfoca
- 27. jQuery evento cuando se crea el elemento
- 28. ¿Hay un evento 'listo' disparado cuando se crea un elemento jQuery sobre la marcha?
- 29. Pasar parámetros a un cierre para setTimeout
- 30. Trazando un cierre
Gracias por el código. Encontré un problema: la ventana gruesa de carga de imágenes parece llamar a la función tb_remove varias veces, haciendo que el código en mi función personalizada tb_remove sea llamado varias veces. ¿Alguna idea sobre cómo combatir esto? –
hmmm ... Trataré de encontrar la manera de solucionarlo. Comentaré si encuentro algo ... ¿Por cierto puedes usar otra biblioteca? –
Tengo un código que reproduce el problema en WordPress aquí: [link] (http://wordpress.stackexchange.com/questions/18216/issue-with-code-manipulating-the-image-upload-thickbox). Estoy tratando de usar el thickbox de carga de imagen incorporado de WordPress, pero me estoy encontrando con este problema. –