在jQuery Mobile中更改大选择菜单时重定向
Redirect on change of large select menu in jQuery Mobile
当用户从jQuery Mobile的<select>
菜单中选择一个选项时,我在尝试重定向到另一个页面时遇到问题。
下面是一个非常小的示例,类似于我正在尝试执行的操作,该示例演示了我遇到的问题。问题是,当选项列表太大而无法容纳在屏幕上时,重定向不起作用。当选项适合屏幕时,它可以正常工作。(您可以通过使窗口非常小来在桌面浏览器中重现此内容。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>jQuery Mobile Test</title>
<link rel="stylesheet" href="http://code.jquery.com/mobile/1.1.0/jquery.mobile-1.1.0.min.css">
<script src="http://code.jquery.com/jquery-1.7.1.min.js"></script>
<script src="http://code.jquery.com/mobile/1.1.0/jquery.mobile-1.1.0.min.js"></script>
<script>
$(function () {
$('#mySelect').bind('change', function () {
// The actual logic for building the URL is more complicated, obviously.
// This is just an example.
var url = 'jquery-mobile-test.html?param=' + this.value;
location.href = url;
});
});
</script>
</head>
<body>
<div data-role="page" class="type-home">
<div data-role="content">
<div data-role="fieldcontain">
<select data-native-menu="false" name="param" id="mySelect">
<option>Select an Option...</option>
<option value="1">One</option>
<option value="2">Two</option>
<option value="3">Three</option>
<option value="4">Four</option>
<option value="5">Five</option>
<option value="6">Six</option>
<option value="7">Seven</option>
<option value="8">Eight</option>
<option value="9">Nine</option>
<option value="10">Ten</option>
</select>
</div>
</div>
</div>
</body>
</html>
jQuery Mobile Docs的一些背景:
当
select
具有少量适合设备屏幕的选项时,菜单将显示为带有弹出过渡的小覆盖层。[...]当它有太多选项无法显示在设备的屏幕上时,框架将自动创建一个新的"页面",其中填充了选项的标准列表视图。这使我们能够使用设备上包含的本机滚动在长列表中移动。标签内的文本用作此页面的标题。
当它创建新的"页面"时,它会将#&ui-state=dialog
添加到 URL 的末尾,然后在选择一个选项时,它会将 URL 更改回来。我认为这就是干扰我正在尝试做的重定向的原因。
关于解决此问题的最佳方法的任何建议?
编辑#1:我应该提到我无法使用$.mobile.changePage()
因为我重定向到的页面对它自己的页面进行了一些奇怪的重定向,从而弄乱了过渡。很抱歉,此示例中没有表示这一点。
编辑#2:我粘贴了上面的代码(而不是使用要点),以便人们可以通过搜索更轻松地找到这个问题。
所以我回答了我自己的问题。
这是为我修复它的代码:
var url = 'redirect-to-this-page.html',
$dialog = $('div.ui-page.ui-dialog.ui-page-active');
if ($dialog.length > 0) {
$dialog.bind('pagebeforehide', function () {
location.href = url;
});
} else {
location.href = url;
}
让jQuery Mobile完成它的小魔术表演,用jQuery Mobile的实现替换你的location.href
重定向:
$.mobile.changePage( 'jquery-mobile-test.html?param=' + this.value );
这是一个肮脏的修复,但你可以用setTimeout函数包围window.location:
setTimeout(function() {
window.location.href = '/some-url.html';
}, 0);
- Jquerymobile-使用javascript创建选择菜单
- 修复选择菜单时的背景图像
- 选择菜单重置为以前选择的选项
- JQueryUI选择菜单-如何添加更多选项
- 预填充选择菜单
- 使用较少代码隐藏和显示选择菜单内容的更好方法是什么?javascript
- 使用下拉选择菜单高亮显示一行表格单元格
- Jquery选择菜单选项在页面刷新时失败
- 选择菜单,将json列表与单数值进行匹配
- 从选择菜单中使用 jQuery 多次渲染部分
- 使用数组中的选项填充选择菜单
- 更改鼠标悬停在选择菜单上的颜色
- 使用jquery克隆一个选择菜单
- 如何在外部文件中创建选择菜单并将其嵌入到html中以显示菜单
- jQuery:将按钮过滤器转换为选择菜单选项
- 添加<td>在选择菜单JQuery中选择选项时
- 选择菜单后自动关闭切换导航菜单
- SQL生成的选择菜单,根据相关值更新文本框
- 如何动态填充DataTables选择菜单
- 如何将变量中的数据加载到Jquery Mobile中的选择菜单中