jquery占位符,而AJAX加载下拉菜单
jquery placeholder while ajax loads dropdown menu
我有 2 个下拉列表,一个包含国家/地区列表,另一个包含州列表。当用户点击某个国家/地区时,州下拉列表会更改以反映该国家/地区的州下拉列表。
国家/地区下拉列表如下所示:
<select name="country" id="country" onChange = "states_dropdown(this, 0)">
<option value="001" >United States</option>
<option value="002" >Canada</option>
<option value="003" >Mexico</option>
</select>
州/省是这样的:
<select name="state" id="state">
<option value="00101" >Alabama</option>
<option value="00102" >Alaska</option>
<option value="00103" >Arizona</option>
</select>
显然,当有人更改国家/地区时,状态会发生变化,代码如下:
function state_box(country, user_id) {
var xmlHttp = GetXmlHttpObject();
if (xmlHttp == null) {
alert("Browser does not support HTTP Request");
return;
}
var url = relative_path + 'ajax/states.php';
var action = url + '?country_id=' + country.value;
xmlHttp.onreadystatechange = function() {
if (xmlHttp.readyState == 4) {
document.getElementById('state').innerHTML = xmlHttp.responseText;
}
};
xmlHttp.open("GET", action, true);
xmlHttp.send(null);
}
这一切都工作正常,但实际问题是,当服务器处理请求时,当前选择或默认国家/地区的状态仍然可见。因此,如果有人点击得非常快,他可以选择墨西哥作为国家,选择阿拉巴马州作为州。
加载状态的 ajax/jquery 脚本状态.php只返回选项值,仅此而已。
有没有办法让它在加载时显示:
<option value="">Please wait</option>
甚至可能将整个框设置为"禁用"以防止有人选择它?
您可以将下拉列表设置为在新数据加载时显示等待选项,您可以在发出 ajax 请求之前放置该选项。
document.getElementById('state').innerHTML = '<option value="">Please wait</option>';
您也可以禁用下拉列表,这样做的优点是它是可逆的(以防请求不成功)
document.getElementById('state').disabled = true;
xmlHttp.onreadystatechange = function() {
if (this.readyState == 4) {
document.getElementById('state').disabled = false;
if (this.status == 200){
document.getElementById('state').innerHTML = this.responseText;
}
}
};
function state_box(country, user_id) {
var xmlHttp = GetXmlHttpObject();
if (xmlHttp == null) {
alert("Browser does not support HTTP Request");
return;
}
var url = relative_path + 'ajax/states.php';
var action = url + '?country_id=' + country.value;
var selectBox = document.getElementById('state'); // save the reference to the element
selectBox.innerHTML = '<option value="">Please wait</option>';
selectBox.disabled = true; // disable the select
xmlHttp.onreadystatechange = function() {
if (xmlHttp.readyState == 4) {
selectBox.innerHTML = xmlHttp.responseText;
selectBox.disabled = false; // enable the select
}
};
xmlHttp.open("GET", action, true);
xmlHttp.send(null);
}
前提是responseText
是这样的<option value="00101">city 1</option><option value="00102">city 2</option><option value="00103">city 2</option>
在这里查看此小提琴以供参考
相关文章:
- 如何根据对具有多行的先前列表的选择来动态加载下拉列表
- 动态加载下拉选项
- 加载 Iframe src,并从水平下拉菜单中进行选择
- Jquery - 根据下拉菜单选择加载 XML 文件
- 下拉菜单 TBS - 加载值
- 带有 AJAX 下拉菜单的代码点火器在form_validation失败并重定向/重新加载视图后不起作用
- jquery占位符,而AJAX加载下拉菜单
- 将数据加载到动态填充的分部视图中的选择下拉菜单
- 如何在小于 600 像素的屏幕上的页面加载中“打开”引导下拉菜单
- 从本地存储存储和加载下拉选择
- 使用下拉菜单加载 iframe 的 src,然后进行更改
- 使用jQuery删除值后,刷新/重新加载下拉列表
- 从$getJSON加载下拉值
- 从Javascript数组加载下拉列表并使用angularjs设置选定值的最简单方法
- 在从另一个下拉菜单中选择一个选项时动态加载下拉菜单
- 当远程加载下拉选项时,语义UI不会替换GET路由中的{value}
- 如何重新加载下拉列表
- 在从另一个下拉菜单中选择值时加载下拉菜单中选择的值
- 输入远程数据库并动态加载下拉列表
- 重新加载下拉框内容