问题
当用户采取行动而不是加载时,如何让这个序列触发?
背景
我有三个<select>
链接在一起的菜单:国家、地区、城市。在 region 中显示的选项取决于在 country 中选择的值,在 city 中显示的选项取决于在 region 中选择的值。例如,如果您从国家/地区中选择“美国”,则区域中的选项将是 50 个州,以此类推。Country 是唯一始终保持静态的菜单。区域和城市菜单选项根据用户从前面的菜单中选择的内容动态填充。When values from country or region are selected, the options for their chained sub-menus are fetched from the server. 这个过程在$(selectID).change()
. 我正在使用Chained Selects jQuery 插件来完成此操作。具体来说,我正在使用“远程”)。
<select>
菜单结构:
<select id="country">
<option value="0">Select country...</option>
<option value="1">Country 1</option>
<option value="2">Country 2</option>
...
</select>
<select id="region">
<option value="0">Select region...</option>
<option value="1">region 1</option>
<option value="2">region 2</option>
...
</select>
<select id="city">
<option value="0">Select city...</option>
<option value="1">city 1</option>
<option value="2">city 2</option>
...
</select>
通过链接 API,<select>
菜单链接在一起,$(document).ready()
如下所示:
$('#region').remoteChained('#country', 'server.php');
$('#city').remoteChained('#region', 'server.php');
问题
这些<select>
菜单是搜索界面的一部分。此界面会记住用户最近的搜索。例如,假设用户最近的搜索是“美国 > 路易斯安那州 > 新奥尔良”,<select>
那么页面上的项目最初应该呈现如下(此时链式 API 根本不应该发挥作用):
<select id="country">
...
<option value="113" selected>United States</option>
...
</select>
<select id="region">
...
<option value="1390" selected>Louisiana</option>
...
</select>
<select id="city">
...
<option value="17267" selected>New Orleans</option>
...
</select>
但最终发生的是,当$(selectID).remoteChained(...)
函数被调用时$(document).ready()
,区域和城市选择选项被从服务器获取的值覆盖,并且“选定”选项丢失(<option>
区域和城市的初始项目的整个列表都丢失了, 实际上)。使用上面保存的搜索示例,三个选择选项中的每一个的选项最初应预先选择为 1) 美国 2) 路易斯安那州 3) 新奥尔良,但改为 1) 美国 2) 选择地区... 3)选择城市... 换句话说,<select>
菜单应该只在用户实际更改其中一个值时动态构建,而不是在页面加载时。
关于如何避免在页面加载时获取新的选择选项的任何建议,并且仅在用户物理更改选择选项时才这样做?我尝试过调用该remoteChained()
函数,$(selectID).change()
但遇到了使堆栈过载的递归问题,所以这不起作用。
提前感谢您可能有的任何想法。