动态移动下拉列表

时间:2015-02-18 22:15:55

标签: jquery jquery-mobile

我正在尝试从字段级脚本动态填充下拉列表,该脚本收集必要的数据并使用新选项填充下拉列表。通常,在非移动浏览器上,选择下拉列表后会删除旧选项并显示新选项。但是,在移动设备上(更具体地说是在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>

工作JSFiddle example

如前所述,这个“bug”似乎只出现在移动浏览器中,以及使用此方法时的Safari(而不是jQuery下拉列表)。我已尝试过其他选项,例如jQuery Mobile下拉列表等,但它们也没有按预期工作。一个有效的选择是打开AJAX,但这样做会搞砸网站的其他部分,所以不得不关闭AJAX。

为了让问题出现在我的桌面浏览器上,我使用Safari v8.0.2(在Mac OS X 10.10.1上),用户代理设置为“Safari iOS 8.1 - iPad”,以查看链接的JSFiddle页面以上。该问题在查看该页面时也出现在默认Safari上,但在其他浏览器上,它会按预期更新,奇怪的是。

非常感谢任何帮助。

0 个答案:

没有答案