当我在Jquery Mobile中刷新页面时为什么页面变空?

时间:2015-05-28 05:19:13

标签: jquery jquery-mobile

我正在使用Jquery Mobile。我从JSON文件中获取结果并将其显示在页面上。内容通过单击事件显示。但是当我刷新页面页面变空时。问题是什么?

由于

1 个答案:

答案 0 :(得分:0)

我想我明白了:所以你动态加载页面上的元素,但是当你刷新所有内容时,通过查看你到目前为止所采用的方法,这是预期的。

使用Jquery mobile,您不要使用click来动态插入elemenets,尝试在整个文档上绑定“pagebeforechange”,然后处理URL。

$(document).bind( "pagebeforechange", function( e, data ) {....})

以下是您尝试执行的操作示例,请注意Jquery Mobile 1.0 ..(完整源代码粘贴在下面):http://demos.jquerymobile.com/1.0/docs/pages/dynamic-samples/sample-reuse-page.html

也可能想看看使用更新版本的Jquery Mobile ....这里的一些东西可能已被弃用。

<强>解释

所以基本上“ pagebeforeshow ”处理程序会在页面出现之前触发。

  • 编写函数以读取和处理URL请求
  • 调用构建所请求页面元素的相关函数

此外,您可能希望对链接锚“a href =”#“”

更具描述性

但是为什么javascript会处理第一个登陆页面呢?除非你计划在第一页上拥有和淫秽数据......

<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>changePage JSON Sample</title>
<link rel="stylesheet"  href="//code.jquery.com/mobile/1.0/jquery.mobile-1.0.min.css">
<script src="//code.jquery.com/jquery-1.6.4.js"></script>
<script src="//code.jquery.com/mobile/1.0/jquery.mobile-1.0.min.js"></script>
<script>

// Some sample categorized data. This data is in-memory
// for demonstration purposes, but could be loaded dynamically
// via ajax.
var categoryData = {
	animals: {
		name: "Animals",
		description: "All your favorites from aardvarks to zebras.",
		items: [
			{
				name: "Pets",
			},
			{
				name: "Farm Animals",
			},
			{
				name: "Wild Animals",
			}
		]
	},
	colors: {
		name: "Colors",
		description: "Fresh colors from the magic rainbow.",
		items: [
			{
				name: "Blue",
			},
			{
				name: "Green",
			},
			{
				name: "Orange",
			},
			{
				name: "Purple",
			},
			{
				name: "Red",
			},
			{
				name: "Yellow",
			},
			{
				name: "Violet",
			}
		]
	},
	vehicles: {
		name: "Vehicles",
		description: "Everything from cars to planes.",
		items: [
			{
				name: "Cars",
			},
			{
				name: "Planes",
			},
			{
				name: "Construction",
			}
		]
	}
};

// Load the data for a specific category, based on
// the URL passed in. Generate markup for the items in the
// category, inject it into an embedded page, and then make
// that page the current active page.
function showCategory( urlObj, options )
{
	var categoryName = urlObj.hash.replace( /.*category=/, "" ),

		// Get the object that represents the category we
		// are interested in. Note, that at this point we could
		// instead fire off an ajax request to fetch the data, but
		// for the purposes of this sample, it's already in memory.
		category = categoryData[ categoryName ],

		// The pages we use to display our content are already in
		// the DOM. The id of the page we are going to write our
		// content into is specified in the hash before the '?'.
		pageSelector = urlObj.hash.replace( /\?.*$/, "" );

	if ( category ) {
		// Get the page we are going to dump our content into.
		var $page = $( pageSelector ),

			// Get the header for the page.
			$header = $page.children( ":jqmData(role=header)" ),

			// Get the content area element for the page.
			$content = $page.children( ":jqmData(role=content)" ),

			// The markup we are going to inject into the content
			// area of the page.
			markup = "<p>" + category.description + "</p><ul data-role='listview' data-inset='true'>",

			// The array of items for this category.
			cItems = category.items,

			// The number of items in the category.
			numItems = cItems.length;

		// Generate a list item for each item in the category
		// and add it to our markup.
		for ( var i = 0; i < numItems; i++ ) {
			markup += "<li>" + cItems[i].name + "</li>";
		}
		markup += "</ul>";

		// Find the h1 element in our header and inject the name of
		// the category into it.
		$header.find( "h1" ).html( category.name );

		// Inject the category items markup into the content element.
		$content.html( markup );

		// Pages are lazily enhanced. We call page() on the page
		// element to make sure it is always enhanced before we
		// attempt to enhance the listview markup we just injected.
		// Subsequent calls to page() are ignored since a page/widget
		// can only be enhanced once.
		$page.page();

		// Enhance the listview we just injected.
		$content.find( ":jqmData(role=listview)" ).listview();

		// We don't want the data-url of the page we just modified
		// to be the url that shows up in the browser's location field,
		// so set the dataUrl option to the URL for the category
		// we just loaded.
		options.dataUrl = urlObj.href;

		// Now call changePage() and tell it to switch to
		// the page we just modified.
		$.mobile.changePage( $page, options );
	}
}

 
// Listen for any attempts to call changePage().
$(document).bind( "pagebeforechange", function( e, data ) {
	// We only want to handle changePage() calls where the caller is
	// asking us to load a page by URL.
	if ( typeof data.toPage === "string" ) {
		// We are being asked to load a page by URL, but we only
		// want to handle URLs that request the data for a specific
		// category.
		var u = $.mobile.path.parseUrl( data.toPage ),
			re = /^#category-item/;
		if ( u.hash.search(re) !== -1 ) {
			// We're being asked to display the items for a specific category.
			// Call our internal method that builds the content for the category
			// on the fly based on our in-memory category data structure.
			showCategory( u, data.options );

			// Make sure to tell changePage() we've handled this call so it doesn't
			// have to do anything.
			e.preventDefault();
		}
	}
});


</script>
</head>

<body>
<div id="home" data-role="page">
  <div data-role="header"><h1>Categories</h1></div>
  <div data-role="content">
  	<h2>Select a Category Below:</h2>
  	<ul data-role="listview" data-inset="true">
    	<li><a href="#category-items?category=animals">Animals</a></li>
    	<li><a href="#category-items?category=colors">Colors</a></li>
    	<li><a href="#category-items?category=vehicles">Vehicles</a></li>
    </ul>
  </div>

</div>
<div id="category-items" data-role="page">
  <div data-role="header"><h1></h1></div>
  <div data-role="content"></div>
</div>
</body>
</html>