我正在尝试从字段级脚本动态填充下拉列表,该脚本收集必要的数据并使用新选项填充下拉列表。通常,在非移动浏览器上,选择下拉列表后会删除旧选项并显示新选项。但是,在移动设备上(更具体地说是在iPad和iPhone上),旧的选项会一直保留到退出下拉菜单并重新打开它。在非移动浏览器上,我已经能够使用jQuery UI来获得跨平台解决方案,但是,此解决方案不适用于移动平台(如下所述)。这不是确切的代码,但这是一个重新创建问题的片段:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252" />
<!-- for mobile devices set the width to the device width -->
<meta name="viewport" content="width=device-width, initial-scale=1">
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script type="text/javascript">var jQ = jQuery.noConflict();</script>
<link rel="stylesheet" href="//code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.min.css" />
<script src="//code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.min.js"></script>
</head>
<body>
<div data-role="page">
<div data-role="fieldcontain" style="">
<select id="field_4" class="sbi" name="cstate" >
<option value="">-- Select --</option>
<option value="AK">Alaska</option>
<option value="AL">Alabama</option>
<option value="AR">Arkansas</option>
...
<option value="WI">Wisconsin</option>
<option value="WV">West Virginia</option>
<option value="WY">Wyoming</option>
</select>
</div>
<script>
function testFill(elem) {
jQ(elem).empty();
jQ(elem).append(jQ("<option></option>").val("test1").text("test1"));
jQ(elem).append(jQ("<option></option>").val("test2").text("test2"));
jQ(elem).append(jQ("<option></option>").val("test3").text("test3"));
jQ(elem).append(jQ("<option></option>").val("test4").text("test4"));
}
var sbi = document.getElementsByClassName("sbi");
if (sbi != null && sbi.length != 0) {
for (var i = 0; i < sbi.length; i++) {
if (sbi[i].tagName == "SELECT") {
sbi[i].onclick = function() {
//alert("test");
testFill(sbi[i]);
};
}
}
}
</script>
</div>
</body>
</html>
如前所述,这个“bug”似乎只出现在移动浏览器中,以及使用此方法时的Safari(而不是jQuery下拉列表)。我已尝试过其他选项,例如jQuery Mobile下拉列表等,但它们也没有按预期工作。一个有效的选择是打开AJAX,但这样做会搞砸网站的其他部分,所以不得不关闭AJAX。
为了让问题出现在我的桌面浏览器上,我使用Safari v8.0.2(在Mac OS X 10.10.1上),用户代理设置为“Safari iOS 8.1 - iPad”,以查看链接的JSFiddle页面以上。该问题在查看该页面时也出现在默认Safari上,但在其他浏览器上,它会按预期更新,奇怪的是。
非常感谢任何帮助。