2013-04-15 11 views
17

Mam następujący kod tworząc wyskakujące okienko przy użyciu jQuery mobile. Wyskakujące okienko jest tworzone, a formularz jest tworzony i dołączany do wyskakującego okienka wraz z dwoma przyciskami. Ten kod działa, ale zastanawiam się, czy istnieje lepszy sposób na osiągnięcie zamierzonego celu.jQuery Mobile najlepszy sposób tworzenia pop-upu i zawartości dynamicznie

//create a div for the popup 
    var $popUp = $("<div/>").popup({ 
     dismissible : false, 
     theme : "a", 
     overlyaTheme : "a", 
     transition : "pop" 
    }).bind("popupafterclose", function() { 
        //remove the popup when closing 
     $(this).remove(); 
    }); 
    //create a title for the popup 
    $("<h2/>", { 
     text : PURCHASE_TITLE 
    }).appendTo($popUp); 

      //create a message for the popup 
    $("<p/>", { 
     text : PURCHASE_TEXT 
    }).appendTo($popUp); 

    //create a form for the pop up 
    $("<form>").append($("<input/>", { 
     type : "password", 
     name : "password", 
     placeholder : PASSWORD_INPUT_PLACEHOLDER 
    })).appendTo($popUp); 

    //Create a submit button(fake) 
    $("<a>", { 
     text : SUBMIT_BTN_TXT 
    }).buttonMarkup({ 
     inline : true, 
     icon : "check" 
    }).bind("click", function() { 
     $popUp.popup("close"); 
     that.subscribeToAsset(callback); 
    }).appendTo($popUp); 

    //create a back button 
    $("<a>", { 
     text : BACK_BTN_TXT, 
     "data-jqm-rel" : "back" 
    }).buttonMarkup({ 
     inline : true, 
     icon : "back" 
    }).appendTo($popUp); 

    $popUp.popup("open").trigger("create"); 
+3

jego działanie http://jsfiddle.net/Palestinian/YCZrg/ i podoba mi się to. bardzo kreatywny pomysł. jak powiedział Gajotres poniżej, zastąpił '.bind' z' .on'. – Omar

+0

Dzięki Omar, piszę aplikację z bardzo małym znacznikiem HTML, więc uważam, że to najlepsze podejście. – user1812741

+0

Jedyne, czego nie lubię, to to, że wygląda nieco "hacky", jaka jest twoja opinia na ten temat? – user1812741

Odpowiedz

9

Twój przykład jest świetny, to jest przykładowy przykład tworzenia dynamicznej zawartości jQuery/jQuery Mobile.

Zmień tylko trzy rzeczy:

  • Na koniec należy dołączyć okienko do potrzebnej strony jQuery Mobile nie będzie działać poza data-role = „strona” div.
  • Zmień funkcję bind na funkcję na. On jest znacznie szybszą metodą wiązania zdarzeń. I to tutaj zastąpić bind i delegata.
  • Sprawdź, czy Twój kod będzie działał w przeglądarkach internetowych, takich jak Chrome. Chrome ma nieprzyjemny błąd, który zapobiega uruchamianiu programowego popup przy każdym zdarzeniu na stronie z wyjątkiem pagehow. Więcej informacji na temat tego problemu: https://stackoverflow.com/a/15830353/1848600
+0

Wielkie dzięki za opinię. Jednym fragmentem kodu, którego nie byłem pewien, jest dodanie "data-jqm-rel": "wstecz". Nie widzę innego sposobu na dodanie tego atrybutu. – user1812741

+0

Dodaj do tagu używanego do zamykania popupów. Powinno to wyglądać tak: Close W takim przypadku nie używaj href na tagu lub jeśli nadal będziesz go używał, pozwól, aby było tak: href = "#". a – Gajotres

+0

Witaj Gajotres, próbowałem dołączyć popup do strony mobilnej jQuery, ale to nie zadziałało. Wypróbowałem to w przykładzie jsFiddle stworzonym przez Omara tutaj http://jsfiddle.net/Palestinian/YCZrg/, a także wypróbowałem w mojej aplikacji. Problem polegał na tym, że nakładka obejmowała całe wyskakujące okienko, a szerokość wyskakującego okienka była w pełnym rozmiarze. – user1812741

0

pierwsze nurkowanie Popup z ur contant

<div id="popupPhotoLandscape" class="photopopup" data-role="popup" data-theme="none" data-  shadow="false" data-overlay-theme="a"> 
      <a href="#home" data-role="button" data-theme="a" data-icon="delete" data-iconpos="notext" class="ui-btn-right">Close</a> 

//Content 
     </div> 

guzik Otwórz Popup

<a data-role="button" data-theme="c" data-inline="true" data-mini="true" id="snap_view_btn" style="float:left;margin-top: 4px;" >Snap View</a> 

Kliknij na przycisk

$('#snap_view_btn').click(function() { 

    $('#popupPhotoLandscape').popup(); 
    $('#popupPhotoLandscape').popup("open"); 
}); 

Page Init

$(document).on("pageinit", function() { 

    $(".photopopup").on({ 
    popupbeforeposition: function() { 
     var maxHeight = $(window).height() - 60 + "px"; 
     $(".photopopup").css("height", '800px'); 
     $(".photopopup").css("width", '600px'); 
    } 

}); 

}); 
+3

Przykro mi, ale chodziło o to, że utworzyłem html/poup w locie – user1812741

Powiązane problemy