Cierre el cuadro de diálogo de jQuery UI desde Iframe

Implementé el siguiente código para cargar fotos dentro de un diálogo jQuery (usando un iframe).

Aquí está el iframe

Y aquí está el código jQuery en la página principal que se encarga de abrir el diálogo.

 $("#upload-image").click(function (e) { e.preventDefault(); $('#upload-form').dialog({ modal: true, width: 300, title: "Upload Image", autoOpen: true, close: function(event, ui) { $(this).dialog('close') } }); }); 

Luego, inserto una secuencia de comandos (en la página iframe) después de que la carga se haya realizado correctamente, que devuelve un resultado a la página principal, pero quiero cerrar el diálogo al mismo tiempo.

 $(document).ready(function () { $(parent.document).find('#imagePathValue').val('theimagevalue'); $(parent.document).find('#upload-form').dialog('close'); }); 

El #imagePathValue se transfiere con éxito, pero parece que no puedo cerrar el diálogo.

¿Algunas ideas?

Para que funcione, debe llamar a jQuery desde el padre, no desde dentro del iframe. Para hacer esto, use lo siguiente …

 window.parent.jQuery('#upload-form').dialog('close'); 

¡Deberias hacer eso!

Prueba esto:

 $(document).ready(function () { $(parent.document).find('#imagePathValue').val('theimagevalue'); window.parent.$('#upload-form').dialog('close'); }); 

Además de eso, también debes hacer esto:

 window.parent.$('#upload-form').remove(); 

por lo que la instancia de Iframe se elimina después de cerrar el cuadro de diálogo.

el código final debe ser:

 $(document).ready(function () { $(parent.document).find('#imagePathValue').val('theimagevalue'); window.parent.$('#upload-form').dialog('close'); window.parent.$('#upload-form').remove(); }); 

Gracias Kaushal

Definitivamente, recuerde que para llamar a esos tipos de funciones, debe hacer referencia a la función en el documento principal en sí. Cuando utiliza el segundo argumento del constructor de jquery, solo especifica el destino del método, no dónde ejecutarlo.

Es por eso que $('element', window.parent.document).method(); no funcionará, y window.parent.jQuery('element').method(); será.