2010-02-20 27 views
11

Puede alguien dar un ejemplo limpio de cómo utilizar la interfaz de usuario de diálogo modal de jQuery. Sorprendentemente, no es tan simple como crees.jQuery UI modal Tutorial

Objetivo:

  1. clic en un elemento de carga un modal

  2. El modal aparece mostrando "Cargando ..." y luego hace una llamada AJAX para obtener el contenido de la modal

  3. El modal se puede cerrar haciendo clic en cerrar btn o presionando escape

  4. El modal se puede volver a abrir, y cuando se vuelve a abrir, no muestra el estado de la interacción modal anterior.

Gracias!

Aquí es lo que estoy haciendo actualmente, pero funciona muy torpe y no parece en absoluto como una solución inteligente. Ideas?

var $dialog = $('<div id="sharerdialog"></div>') 
.html('<p>Loading...</p>') 
.dialog({ 
    autoOpen: false, 
    title: 'Share the item', 
    position: ['center',150], 
    width: 450, 
    focus:function(event, ui) { 
     $('#dialogcloser').click(function() { 
      $dialog.dialog('close'); 
     }); 
    }, 
    open: function(event, ui) { 
     var title2use = document.title; 
     title2use = escape(title2use);   
     $("#sharerdialog").load("/items/ajax/share/index_beta.cfm?itemid=#itemID#&itemtitle=" + title2use); 
    } 
}); 
// Bind the Share btn to Open the Modal 
$('#itemshare').click(function() { 
    $dialog.dialog('open'); 
}); 
+0

Con mucho gusto. Muéstranos lo que has intentado hasta ahora usando jsbin.com y podemos completar los espacios en blanco o corregir los errores. – redsquare

+1

@RedSquare, buena idea ... Actualicé la pregunta con mi JS actual. Gracias – AnApprentice

Respuesta

1

El principal problema que veo con su código, es que no se está agregando el diálogo para el DOM, por lo tanto, el navegador lo muestra. Mi sugerencia es que primero intentes:

var $dialog = $('<div id="sharedialog"></div>') 
     .html('<p>Loading....</p>') 
     .appendTo('body') 
     .dialog({...}); 

Para que lo hayas agregado al DOM y el navegador pueda mostrarlo.

+0

Interesante, el código anterior está trabajando muy bien, sólo parece real torpe. – AnApprentice

+1

Desde una perspectiva de interfaz de usuario, que puede ser molesto para ver un referente cada vez que realice una solicitud. Como mencionaste que el usuario puede cerrarlo, supongo que solo quieres dar al usuario la opinión de que la respuesta se está cargando. En ese caso, ¿por qué no simplemente muestra el texto "Cargando ..." (o icono), cerca del botón o como una capa superior sobre el área de resultados? Use css 'visibility: hidden;' o 'display: none;' y muéstrela/escúrela usando jQuery. – guzart

+0

Interesante idea. – AnApprentice

1

¿Por qué tan compleja?

$(function() { 
    $("#itemshare").click(function() { 
     $("#sharerdialog").dialog().load("/items/ajax/share/index_beta.cfm"); 
     return false; 
    }); 
    }); 

se pueden encadenar que uo en jQuery. Y en el HTML solo tiene un div vacío con el ID sharerdialog. Puede diseñarlo oculta

style="display: none;" 

Pero eso es todo

Cuestiones relacionadas