jQuery Mobile - лучший способ динамически создавать всплывающие окна и контент

У меня есть следующий код создания всплывающего окна с помощью мобильного телефона jQuery. Создается всплывающее окно, создается форма и добавляется к нему вместе с двумя кнопками. Этот код работает, но мне интересно, есть ли лучший способ достичь моей намеченной цели.

    //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 ответа

Решение

Ваш пример великолепен, это пример плаката, как следует создавать динамический контент jQuery/jQuery Mobile.

Изменить только три вещи:

  • В конце вы должны добавить всплывающее окно на нужную страницу jQuery Mobile, потому что она не будет работать вне div data-role="page".
  • Измените привязку функции к функции. Это гораздо более быстрый метод привязки событий. И это здесь, чтобы заменить связывание и делегирование.
  • Проверьте, будет ли ваш код работать в таких веб-браузерах, как Chrome. В Chrome есть неприятная ошибка, которая препятствует открытию программных всплывающихокон при каждом событии страницы, кроме pagehow. Больше информации об этой проблеме: /questions/44186201/jquery-mobile-vsplyivayuschee-okno-s-istoriej-lozhnyie-avtokosyi/44186238#44186238

https://github.com/serbanghita/jQM-dynamic-popup может помочь вам. Вам все еще нужно разметить код jQuery Mobile внутри содержимого всплывающего окна. Я использую это в производстве, но для простых сообщений.

Сначала всплывающее окно всплывающее с твоим продолжением

 <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>

Кнопка для открытия всплывающего окна

   <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>

Нажмите для кнопки

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

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

Начальная страница

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

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

 });

 });
Другие вопросы по тегам