现在jQuery Mobile已经成熟了很多,距离1.0版本发布也越来越近,所以我决定再次尝试让它正常工作。我已经取得了很好的成功,所以我想在这里分享解决方案。
以下是我目前正在使用的版本(截至2012年2月1日):
jQuery Mobile 1.0.1
jQuery 1.6.4
jQuery UI 1.8.12
脚本引用的顺序非常关键。它需要按照jQuery、jQuery UI、jQuery Mobile、最后是自定义脚本文件的顺序。我的页面头看起来像这样:
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, minimum-scale=1, maximum-scale=1" />
<title>My jQM App</title>
<link rel="stylesheet" href="http://ajax.aspnetcdn.com/ajax/jquery.mobile/1.0.1/jquery.mobile-1.0.1.min.css" />
<script src="http://ajax.aspnetcdn.com/ajax/jquery/jquery-1.6.4.min.js" type="text/javascript"></script>
<script src="http://ajax.aspnetcdn.com/ajax/jquery.ui/1.8.12/jquery-ui.min.js" type="text/javascript"></script>
<script src="http://ajax.aspnetcdn.com/ajax/jquery.mobile/1.0.1/jquery.mobile-1.0.1.min.js" type="text/javascript"></script>
<script src="/Scripts/script.js" type="text/javascript"></script>
<link rel="stylesheet" href="/Content/style.css" />
</head>
所有的自动完成代码都应该放在单独的.js文件中,并且应该是最后一个链接的文件。在这个示例中,我的文件名是script.js。
接下来,请确保您页面上所有的div元素(data-role='page')也都有设置id属性。例如,在我的搜索页面中:
<div data-role="page" id="searchPage">
现在所有页面div都有了ID,您可以绑定到jQuery Mobile页面创建事件以针对该div执行操作。在标准的jQuery页面中,您需要为自动完成功能添加以下内容:
$('#search').autocomplete({
source: '/Autocomplete/SearchAutoComplete',
minLength: 3,
select: function (event, ui) { }
});
要实现相同的效果并将其连接到特定页面的 div,可以这样做:
$('#searchPage').live('pageinit', function (event) {
$('#search').autocomplete({
source: '/Autocomplete/SearchAutoComplete',
minLength: 3,
select: function (event, ui) { }
});
});
目前为止,这对我一直很有效。我已经能够去掉我所采用的大多数data-ajax="false"属性作为一种解决方法。这反过来又导致了更好的应用程序性能。我并没有对jQuery UI和jQuery Mobile之间进行详尽的兼容性测试,所以你的结果可能会有所不同。如果您使用此方法遇到任何问题,请在此处留下评论。祝好运。
.live
已被移除,现在应该使用.on
。也许您应该编辑您的帖子以反映这一点? - aarona