【问题标题】:Selecting radio button option based on keyboard input根据键盘输入选择单选按钮选项
【发布时间】:2010-12-25 09:10:33
【问题描述】:

我有一个充满单选按钮的页面,我希望能够通过 Tab 键浏览,然后根据键盘输入选择选项。我希望让键盘输入在单选按钮上的工作方式类似于它在下拉菜单上的工作方式(键入字母“G”将自动选择以“G”开头的第一个选项)

是否有一个 jquery 插件可以帮助我解决这个问题,或者我必须从头开始整合这些功能。不幸的是,根据客户的要求,选项需要保持单选按钮(而不是下拉菜单)格式,并且内置的制表符/箭头键/空格键功能还不够。

谢谢

【问题讨论】:

  • 似乎找不到任何预构建的东西,如果我有机会构建一个值得发布的插件,我会在这里发布一个链接。

标签: jquery jquery-plugins keyboard drop-down-menu radio-button


【解决方案1】:

以下是一些您可能会使用的代码示例。根据需要添加您自己的 Case 部分,放入您的选择器以匹配您的结构。

一个通过了当前的选择,另一个没有。 随心所欲地使用,并根据您的需要而定。

 /* handle special key press */
    function checkKey(e)
    {
        var shouldBubble = true;
        switch (e.keyCode)
        {
            // user pressed the Tab                                           
            case 9:
                {
                    $(".pickMyClass").toggleClass("pickSelectVisible");
                    $("#someOtherClass").toggleClass('pickHighlight');
                    shouldBubble = false;
                    break;
                };
                // user pressed the Enter    
            case 13:
                {
                    $(".pickMyClass").toggleClass("pickSelectVisible");
                    $('.pickEntryArea').trigger('change'); /* we made changes so trigger it */
                    $("#someOtherClass").toggleClass('pickHighlight');
                    break;
                };
                // user pressed the ESC
            case 27:
                {
                    $(".pickMyClass").toggleClass("pickSelectVisible");
                    $("#someOtherClass").toggleClass('pickHighlight');
                    break;
                };
        };
        /* this propogates the jQuery event if true */
        return shouldBubble;
    };
    /* handle special key press */
    function checkFieldKey(e, me)
    {
        var shouldBubble = true;
        switch (e.keyCode)
        {

            // user pressed the Enter           
            case 13:
                {
                    $(me).blur();
                    $("#someSpecialSelect").focus();
                    shouldBubble = false;
                    break;
                };
        };
        /* this propogates the jQuery event if true */
        return shouldBubble;
    };
    /* user pressed special keys while in Select */
    $(".someSelect").keydown(function(e)
    {
        return checkKey(e);
    });
    /* user pressed special keys while in Select */
    $(".somethingOther").keydown(function(e)
    {
        return checkFieldKey(e, $(this));
    });

【讨论】:

  • 这个框架看起来很棒,如果我需要从头开始构建一些东西,我可能最终会使用它,但不幸的是,我正在寻找能够查看文本并自动检查键的东西,而不是必须定义每个键应该如何操作。基本上是在寻找一些我可以放到多个地方而无需更改任何代码的东西,它将允许单选按钮以与下拉菜单相同的方式对键盘输入做出反应。
  • 您可以为字符放置一个大小写,然后有一个通用的过程来管理对关键条目的反应 - 并从中创建一个简单的插件......只是一个想法。它不应该那么困难。我还没有寻找“无线电字符”类型的插件。
  • 真的,听起来您想像自动完成插件一样处理击键,但让它作用于单选按钮中的文本 - 所以应该可以从自动完成中提取击键处理并从那里创建一个新插件,或者使用我提供的作为基线起点。
  • 由于那里似乎没有任何预先构建的东西,我会接受你的回答。感谢您的帮助,这个框架应该真正简化构建一个快速插件的过程,该插件可以检查键盘输入与可用的单选按钮选项。
【解决方案2】:

使用 HTML 而不是 jQuery,浏览器有一个内置的机制来选择键盘输入的表单选项 + 使用 'accesskey' 属性的修饰键。我很确定 jQuery 可以在必要时与此方法进行交互。

<p>To select with a keyboard, click "alt+a" or "alt+b"*</p>
<form name="myForm" method="post">
    <input type="radio" accesskey="a" value="a" name="myRadio" /> Value A
    <input type="radio" accesskey="b" value="b" name="myRadio" /> Value B
    <input type="submit" name="submit" value="submit" />
</form>

*更多解释见:http://www.webaim.org/techniques/keyboard/accesskey.php

【讨论】:

  • 我可以看到它的潜力,但我正在寻找更多可以查看文本并自动处理访问密钥的东西。我上面没有提到的下拉菜单的另一个功能是,按两次“G”将移动到以“G”开头的第二个响应。对我来说,另一个标签是不同的浏览器使用不同的按键组合。
  • 你要假设单选按钮文本的第一个字母吗?如果有重复怎么办?
  • 是的,假设单选按钮文本的第一个字母。就像我说的那样,如果可能的话,我希望有一些可以完全复制下拉菜单样式的东西,但还不足以从头开始创建它。最低要求是遍历所有以按下的字母开头的选项。如果可能的话,最好支持前几个字母的快速爆发。
  • 在这种情况下,发布您的单选按钮 HTML 的片段会对您有所帮助。恐怕您可能会遇到复制下拉选择输入的问题,因为许多键已经映射到没有键盘修饰符的浏览器功能。当它处于焦点时,它在选择输入时起作用。我不确定是否可以以相同的方式关注一组单选按钮。
猜你喜欢
  • 2017-04-04
  • 2015-08-17
  • 2015-11-26
  • 2018-06-03
  • 2021-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多