代码之家  ›  专栏  ›  技术社区  ›  Kzqai

具有10000个可能值的下拉列表和顺序重要下拉列表与优雅递减

  •  2
  • Kzqai  · 技术社区  · 15 年前

    背景

    我有一个专门使用javascript搜索约5千条条目(供应商)的表单,并从中填充一个选择下拉列表(工厂,约10千条条目)。现在,它是一个需要javascript的表单。我希望这样做,以便javascript错误不再使表单不可用,但是条目的数量和条目的顺序性使我没有一个惯用的方法来提供基本的HTML版本。

    问题


    顺序/层次下拉列表

    示例下拉列表,其中序列很重要: http://www.javascriptkit.com/javatutors/selectcontent2.shtml

    这样就显示了顺序/层次下拉内容的“过滤”,其中第二个城市下拉列表中的选择将根据第一个国家下拉列表中的选择进行过滤。但是,去掉JavaScript,它可能会立即变得一团糟。在美国的马德里?法国的柏林?序列已损坏。

    具有大量选项的下拉列表

    如果您有一个带有10万个可能选项的Select下拉列表,那么用javascript过滤/搜索它们就非常容易了。另一方面,在没有javacript的情况下处理这些选项要困难得多。

    当你只加载所有选项时,你如何为你的用户提供所有的可能性?这些选项都会让你的浏览器崩溃。


    可能的解决方案

    顺序/层次选择框:

    • 服务器端2部分表单。
    • ?选择选项组?
    • ????

    选择大量选项:

    • 服务器端两部分搜索表单。
    • 服务器端文本搜索条目名称的匹配。
    • ????

    欢迎使用资源丰富的解决方案的简单链接。

    1 回复  |  直到 14 年前
        1
  •  0
  •   RustyTheBoyRobot MatCas    14 年前

    我能想到的唯一解决方案是每次需要缩小结果范围时都使用表单提交。首先显示一个页面来选择供应商的国家。它将提交并返回一个页面,该页面将所选国家显示为文本,现在有一个下拉列表来选择下一个字段,如城市。这样, 服务器 可以在每个级别进行过滤。

    下面是一个JSP示例:

    <c:choose>
        <c:when test="${empty country}">
            Country: 
            <form>
                <select>
                    <option value="USA">America</option>
                    <option value="DEU">Germany</option>
                    <%-- ... --%>
                </select>
            </form>
        </c:when>
        <c:otherwise>
            Country: ${country} 
            <c:choose>
                <c:when test="${empty city}">
                    <input type="submit" value="Change" />   <%-- Button to change the previous value --%>
    
                    <%-- your form for choosing a supplier's city --%>                    
                </c:when>
                <c:otherwise>
                    <%-- continue filtering until you have all of the data --%>
                </c:otherwise>
            </c:choose>
    
        </c:otherwise>
    <c:choose>
    

    选择国家/地区时,表单将提交。您的服务器处理国家/地区,返回与 country 字段值和下一个下拉列表的可能城市列表。这样做只允许您依赖表单提交(而不是javascript)来按顺序筛选数据。您的服务器将负责跟踪用户所处的距离。这个解决方案的明显缺点是,您的JSP将非常混乱,所有的嵌套 <c:choose> 阻碍。

    您也可以尝试混合解决方案:当页面加载时,找出您的javascript是否已加载。如果是这样,请用后面带有Ajax的纯HTML替换提交表单,以填充下一组选项。这样,当JavaScript 加载,但如果javascript 负载。只是一个想法。