【问题标题】:JSF: SelectOneRadio shortcuts for optionsJSF:SelectOneRadio 选项的快捷方式
【发布时间】:2010-03-17 10:51:27
【问题描述】:

我有以下h:selectOneRadio

<h:selectOneRadio id="#{prefix}_rating" value="#{examinationPanel.tempResult}" >
<f:selectItems value="#{examinationPanel.options}"></f:selectItems>
</h:selectOneRadio>

然后后台 bean 会根据一些用户偏好加载选项:

public List<SelectItem> loadOptions (Set<ResultEnum> possibleResults){
    List<SelectItem> options = new ArrayList<SelectItem>();
    for(ResultEnum result:possibleResults){
        SelectItem option = new SelectItem(result,messages.getString(result.name()));
        options.add(option);
    }
    return options;
}

如何为单选组中的选项定义快捷方式?例如输入“1”选择第一个选项,输入“2”选择第二个,等等......

提前致谢! 附言。我正在使用 Jsf 1.2、Richfaces、Primefaces 和 Facelets。

【问题讨论】:

    标签: javascript jsf richfaces facelets primefaces


    【解决方案1】:

    这不是默认内置的。您最好的方法是使用 JavaScript。将函数附加到&lt;body&gt;keypress 事件,检查按下的键的keyCode 并相应地更改下拉列表的selected 项。使用jQuery 只需几行就可以做到这一点。这是SSCCE,只需复制'n'paste'n'运行即可。

    <!doctype html>
    <html lang="en">
        <head>
            <title>SO question 2461588</title>
            <script src="http://code.jquery.com/jquery-latest.min.js"></script>
            <script>
                $(document).ready(function() {
                    $('body').keypress(function(e) {
                        var index = parseInt(String.fromCharCode(e.keyCode));
                        if (0 < index && index < 10) {
                            $('#dropdown option').eq(index - 1).attr('selected', true);
                        }
                    });
                });
            </script>
        </head>
        <body>
            <select id="dropdown">
                <option>option1</option>
                <option>option2</option>
                <option>option3</option>
                <option>option4</option>
                <option>option5</option>
                <option>option6</option>
                <option>option7</option>
                <option>option8</option>
                <option>option9</option>
            </select>
        </body>
    </html>
    

    如果您想支持 10 个或更多项目,则需要维护一个按键堆栈,立即应用它并引入一个超时来重置堆栈(1 秒?)。

    【讨论】:

    • 我是这么认为的......我希望有人知道一个不常见的组件中的一个奇怪的功能,可以为我做到这一点:D。无论如何感谢您的回答。
    • 请记住,您可以在表单对象中从 JSF 中排除生成的 id。这样在 JSF 中使用 jQuery 选择器就容易多了。你可以这样做
      如果你想用 jQuery 在 JSF 中正确地转义 id,你可以使用这个函数: function escapeIdForJQuery(id) { return id.replace(/:/g, "\\:").replace(/\./g,"\\."); }
    • @Shervin:只需在选择器中通过反斜杠转义冒号即可。例如。 $('#formId\:menuId').
    • 我认为你需要双反斜杠
    • @Shervin:当你想代表一个反斜杠本身时,是的。但事实并非如此。
    【解决方案2】:

    您可以调查&lt;rich:hotKey&gt; 是否有帮助。简而言之,它可以让您定义键盘快捷键,但可能需要一些 jQuery 知识。

    【讨论】:

      【解决方案3】:

      PrimeFaces hotKey 也可以提供帮助。

      【讨论】:

        猜你喜欢
        • 2013-07-21
        • 1970-01-01
        • 1970-01-01
        • 2011-04-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多