0

为了澄清这个问题,这是我的场景:

我有一个用于移动设备的小型注册表单。

自然,我一直在桌面上开发表单,并且我的大部分测试都是在桌面上完成的。我也用移动设备进行了测试,在大多数情况下,一切正常——除了 JQuery 与<select>标签绑定在一起时的“点击”事件。

我的表单中有三个<select>字段,它们都是动态获取数据的。这个想法是你点击“国家”,JQuery 触发一个click事件,然后使用 AJAX 从我的服务器获取国家列表。当用户点击“州”时,它将获取属于第一次选择时选择的国家的所有州。对于“城市”重复此行为。

这是一个截图:(“País”表示国家。“Estado/Departamento”是州,“Ciudad”是城市——我为西班牙名字道歉。我的实际代码是英文的,所以不要太担心这个!)

表格截图

在上面的屏幕截图中,您可以看到它确实有效。

三个选择元素在这里:

Pais: <select class="form-control" name="country" id="country"></select>
Estado/Departamento: <select class="form-control" name="state" id="state"></select>
Ciudad: <select class="form-control" name="city" id="city"></select>

还有我的 jQuery 代码:

                    <script>
                $(document).ready(function(){

                    //Actual listeners

                    $("#country").click(function(event){
                            $.get("pseudoapi/getCountries.php",  function(data){
                                var countries = $("#country");
                                countries.empty();
                                for(var i = 0; i < data.length; i++)
                                {
                                    countries.append("<option value='" + data[i]['id'] +"'>"+ data[i]['name'] +"</option>");
                                }
                            }, "json");
                    });

                    $("#state").click(function(event)
                    {
                        $.get("pseudoapi/getStates.php", {country_id : $("#country").val()}, function(data){
                            var state = $("#state");
                            state.empty();
                            for(var i = 0; i < data.length; i++)
                            {
                                state.append("<option value='" + data[i]['id'] +"'>"+ data[i]['name'] +"</option>");
                            }
                        }, "json");
                    });

                    $("#city").click(function(event)
                    {
                        $.get("pseudoapi/getCities.php", {country_id : $("#country").val(), state_id : $("#state").val()}, function(data){
                            var city = $("#city");
                            city.empty();
                            for(var i = 0; i < data.length; i++)
                            {
                                city.append("<option value='" + data[i]['id'] +"'>"+ data[i]['name'] +"</option>");
                            }
                        }, "json");
                    });
                });

                $("#country").change(function(event){
                    $("#state").empty();
                    $("#city").empty();
                });

                $("#state").change(function(event){
                    $("#city").empty();
                });
                </script>

找到不起作用的解决方案

我用谷歌搜索了一段时间,找到了一些解决方案。可悲的是,他们都没有工作。

首先,我了解了 jQuery mobile 及其vclick事件。我几乎可以肯定这会奏效,但事实并非如此。Chrome 抱怨选择标签不存在 vclick 事件。

其次,我被告知在我的其余代码加载后加载 jQuery Mobile。我在结束</body>标记之前加载了脚本,但这并没有使情况变得更好。

最后,也许令人沮丧,但似乎选择标签并未正式支持 click 事件,因此它应该在某些浏览器中有效,但在其他浏览器中无效。老实说,我在这里完全迷失了。

如果没有办法直接回答我的问题,那么即使在移动设备上点击它,用选项填充选择标签的最佳方法是什么?

4

1 回答 1

0

为什么不在页面加载时加载国家并将更改事件分配给选择,这样当用户选择一个国家时,它将填充该国家的州并对州做同样的事情

于 2013-10-11T00:12:15.417 回答