2010-02-20 16 views
11

Czy każdy może podać czysty przykład użycia okna dialogowego Modul interfejsu użytkownika JQuery. Zaskakujące, że nie jest tak proste, jak mogłoby się wydawać.Samouczek modułu JQuery UI

Cel:

  1. kliknięcie elementu ładuje modalne

  2. Modalny pojawia pokazując "Loading ..." A potem robi wywołanie ajax, aby uzyskać zawartość modalnym

  3. Modal można zamknąć, klikając przycisk zamknij btn lub naciskając klawisz escape

  4. Modal można ponownie otworzyć, i po ponownym otwarciu nie pokazuje stanu poprzedniej interakcji modalnej.

Dzięki!

Oto, co obecnie robię, ale działa bardzo niezdarnie i nie wydaje się jak inteligentne rozwiązanie. Pomysły?

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

Z przyjemnością. Pokaż nam, co dotychczas wypróbowałeś używając jsbin.com i możemy wypełnić puste pola lub poprawić błędy. – redsquare

+1

@RedSquare, dobry pomysł ... Zaktualizowałem to pytanie z moim obecnym JS. Dzięki – AnApprentice

Odpowiedz

1

Główny problem widzę w kodzie, jest to, że nie dodajemy okno do DOM, zatem przeglądarka nie będzie go wyświetlić. Moja sugestia jest taka, że ​​najpierw spróbujesz:

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

Dodałeś go do DOM i przeglądarka może go wyświetlić.

+0

Interesujące, powyższy kod działa dobrze, po prostu wydaje się niezgrabny. – AnApprentice

+1

Z punktu widzenia interfejsu użytkownika może być irytujące widzieć modal za każdym razem, gdy wysyłasz żądanie. Ponieważ wspomniałeś, że użytkownik może je zamknąć, zakładam, że chcesz tylko przekazać użytkownikowi informację, że reakcja jest ładowana. W takim przypadku po prostu po prostu pokaż tekst "Ładowanie ..." (lub ikonę), blisko przycisku lub górną warstwę w obszarze wyników. Użyj css 'visibility: hidden;' lub 'display: none;' i pokaż/ukryj go używając jQuery. – guzart

+0

Interesujący pomysł. – AnApprentice

1

Dlaczego tak skomplikowane?

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

Możesz połączyć je w jquery. A w HTML wystarczy pusty div z id sharerdialog. Może to styl ukryty

style="display: none;" 

Ale to wszystko