我似乎已经养成了回答自己问题的习惯!这是解决方案
回顾一下
- 您定义了两个或多个弹出窗口,并且每个弹出窗口都使用一个或多个选择,这些选择被设置为
- 一个。大屏幕上的 jQuery Mobile 选择和 b。小屏幕上的 MobiScroll 选择
- 通过虚拟类声明可以轻松识别选择
- 当弹出窗口关闭时,您要确保选择返回显示他们的第一个选项
为了更具体,这里有一个例子
<div data-role='popup' id='p_taqa1618A'>
<select id = 'r_taqa1618A' class='sppp' data-role='none' data-mini='true'>
<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>
</select>
//other controls inside this popup
<div data-role='popup' id='p_taqa1618B'>
<select id = 'r_taqa1618A' class='sppp' data-role='none' data-mini='true'>
<option value='1'>Eins</option>
<option value='2'>Zwei</option>
<option value='3'>Drei</option>
<option value='4'>Vier</option>
<option value='5'>Funf</option>
</select>
//other controls inside this popup
在任何给定时间,只有 taqa1618A 或 taqa1618B 这两个弹出窗口之一将打开。在那个时候,另一个可能已经或可能没有以前打开和关闭。
最后一句话的结果是天真地尝试通过重置选择
$('.sppp').val('1').selectmenu('refresh') 将不起作用 - jQuery 会抱怨您正在尝试刷新尚未初始化的选择菜单。在小屏幕上使用的滚动版本也可以。所以这是可行的解决方案。
在以编程方式关闭弹出窗口之前,您发出
if (600 < $(window).width())
{
$(popid).find('.sppp').filter('select').val('1').selectmenu('refresh');
} else
{
$(popid).find('.sppp').filter('select').scroller('setValue','1',true);
}
其次是
$(popid).popup('close');
这里有许多微妙的问题,但最需要指出的可能是这一点——升级后的控件最终可能会创建具有相同类的其他元素。例如,当 HTML 选择被升级为 jQuery Mobile 选择菜单时,jQM 添加一个具有相同类的跨度 - 在本例中为 sppp。
这就是为什么您需要通过 filter('select') 过滤 find('.sppp') 结果的原因
我在执行此操作的过程中发现了一个有趣的事实,这很可能是一个 jQM 错误 - 最后一行
$(popid).popup('close')
即使提供的 popid 是错误的,它也能正常工作。