使用jQuery Mobile动态创建虚拟页面

时间:2020-12-10 02:06:28

I try to link virtual pages using jQuery Mobile, but I have two problems :

我尝试使用jQuery Mobile链接虚拟页面,但我有两个问题:

  • The first time when I load the page, the CSS is not applied.
  • 我第一次加载页面时,不会应用CSS。
  • After when I choose a page and I want to change to another page, I notice that every time I passed by the page 1.
  • 当我选择一个页面并且我想要更改为另一个页面时,我注意到每次我经过页面1。

This is my example.

这是我的榜样。

Code :

代码:

            var nbrButton = 3;
            $(document).ready(function(){
                for(i = 1;i <= nbrButton;i++) {

                    $("body").append('<div id="p'+i+'" data-role="page" class="pages"><div data-role="content">Page'+i+'</br><a data-role="button" rel="internal" href="#p1"  data-inline="true">1</a><a data-role="button" rel="internal" href="#p2"  data-inline="true">2</a><a data-role="button" rel="internal" href="#p3"  data-inline="true">3</a></div></div>');

                }
                $("#p1").show();

            });

Could you tell me what is the problem or if there is a better way to do that.

你能告诉我这是什么问题,或者是否有更好的方法可以做到这一点。

Thank you.

谢谢。

3 个解决方案

#1


2  

Update

更新

I also removed data-rel="internal" in the links.

我还删除了链接中的data-rel =“internal”。

Answer

回答

I have done the below.

我做了以下。

instead of

代替

$('#p1').show();

I add this

我加上这个

$.mobile.changePage( '#p1', { allowSamePageTransition: true });

It will refresh Page-1 p1 to reload styles.

它将刷新Page-1 p1以重新加载样式。

Working example.

工作实例。

#2


2  

You can't dynamically create new jQuery Mobile page (you can, but that page will not have styles) unless you have at least one existing. There's a workaround here, you can create an empty jQuery mobile page and use it to create a new one.

您不能动态创建新的jQuery Mobile页面(您可以,但该页面将没有样式),除非您至少有一个现有页面。这里有一个解决方法,你可以创建一个空的jQuery移动页面并用它来创建一个新页面。

Here's a working example:

这是一个有效的例子:

<!DOCTYPE html>
<html>
<head>
    <title>jQM Complex Demo</title>
    <meta name="viewport" content="width=device-width; initial-scale=1.0; maximum-scale=1.0; minimum-scale=1.0; user-scalable=no; target-densityDpi=device-dpi"/>
    <link rel="stylesheet" href="http://code.jquery.com/mobile/1.2.0/jquery.mobile-1.2.0.min.css" />
    <script src="http://www.dragan-gaic.info/js/jquery-1.8.2.min.js"></script>        
    <script src="http://code.jquery.com/mobile/1.2.0/jquery.mobile-1.2.0.min.js"></script>    
    <script>
                $(document).on('pageshow', '#index', function(){       
                    $('<div>').attr({'data-role':'page','id':'second'}).appendTo('body');
                    $('<div>').attr({'data-role':'header','id':'second-header'}).append('<h3>Header Title</h3>').appendTo('#second');
                    $.mobile.changePage("#second");
                });    
    </script>
</head>
<body>
    <div data-role="page" id="index">

    </div>  
</body>
</html>   

Now you should use a pageshow page event of a first hidden page to create new dynamic pages. After page are cretaed just use change page to show a first visible page.

现在,您应该使用第一个隐藏页面的pageshow页面事件来创建新的动态页面。页面被创建后,只需使用更改页面显示第一个可见页面。

#3


-1  

To apply CSS styles just add $("#p1").trigger('create'); as last line after $("#p1").show();

要应用CSS样式,只需添加$(“#p1”)。trigger('create'); $(“#p1”)之后的最后一行.show();

#1


2  

Update

更新

I also removed data-rel="internal" in the links.

我还删除了链接中的data-rel =“internal”。

Answer

回答

I have done the below.

我做了以下。

instead of

代替

$('#p1').show();

I add this

我加上这个

$.mobile.changePage( '#p1', { allowSamePageTransition: true });

It will refresh Page-1 p1 to reload styles.

它将刷新Page-1 p1以重新加载样式。

Working example.

工作实例。

#2


2  

You can't dynamically create new jQuery Mobile page (you can, but that page will not have styles) unless you have at least one existing. There's a workaround here, you can create an empty jQuery mobile page and use it to create a new one.

您不能动态创建新的jQuery Mobile页面(您可以,但该页面将没有样式),除非您至少有一个现有页面。这里有一个解决方法,你可以创建一个空的jQuery移动页面并用它来创建一个新页面。

Here's a working example:

这是一个有效的例子:

<!DOCTYPE html>
<html>
<head>
    <title>jQM Complex Demo</title>
    <meta name="viewport" content="width=device-width; initial-scale=1.0; maximum-scale=1.0; minimum-scale=1.0; user-scalable=no; target-densityDpi=device-dpi"/>
    <link rel="stylesheet" href="http://code.jquery.com/mobile/1.2.0/jquery.mobile-1.2.0.min.css" />
    <script src="http://www.dragan-gaic.info/js/jquery-1.8.2.min.js"></script>        
    <script src="http://code.jquery.com/mobile/1.2.0/jquery.mobile-1.2.0.min.js"></script>    
    <script>
                $(document).on('pageshow', '#index', function(){       
                    $('<div>').attr({'data-role':'page','id':'second'}).appendTo('body');
                    $('<div>').attr({'data-role':'header','id':'second-header'}).append('<h3>Header Title</h3>').appendTo('#second');
                    $.mobile.changePage("#second");
                });    
    </script>
</head>
<body>
    <div data-role="page" id="index">

    </div>  
</body>
</html>   

Now you should use a pageshow page event of a first hidden page to create new dynamic pages. After page are cretaed just use change page to show a first visible page.

现在,您应该使用第一个隐藏页面的pageshow页面事件来创建新的动态页面。页面被创建后,只需使用更改页面显示第一个可见页面。

#3


-1  

To apply CSS styles just add $("#p1").trigger('create'); as last line after $("#p1").show();

要应用CSS样式,只需添加$(“#p1”)。trigger('create'); $(“#p1”)之后的最后一行.show();