【问题标题】:Navigate through input fields with keyboard使用键盘浏览输入字段
【发布时间】:2015-12-09 12:40:21
【问题描述】:

当我用户点击一个链接时,会显示一个 div。在这个 div 里面,有一些输入字段,复选框。其中一些是默认选中的。

我想要完成的事情是,当打开 div 时,我想让用户能够直接在此复选框之间进行制表符/导航。

现在,我必须按几次制表键才能使第一个复选框“聚焦”,这样我就可以开始导航了。我想在用户打开 div 时直接执行此操作,而无需点击两次 tab 按钮。

我试图模拟这样的点击事件:

$('#categoryBasic').click(function () {
    $('#DatabasesValue-1').click();
});

但这不起作用。

这是您单击链接时打开的 div:

<div id="divInputBasic" class="divInput">
    <div id="basicContainer1">
        <div class="basicContainer1 left" style="float: left; width: 35%">
            <label class="small-space-bottom inline-block bold-text">Databas</label>
            <div id="divValueDatabases" class="checkboxButtonGroupSelector">
                @{
                    foreach (var database in PageData["Databases"])
                    {
                        System.Text.StringBuilder sb = new System.Text.StringBuilder();
                        sb.Append(
                            "<input " +
                            "id=\"DatabasesValue-" + database.Id + "\" " +
                            "name=\"DatabasesValue\" " +
                            "type=\"radio\" " +
                            "value=\"" + database.Id + "\" " +
                            (database.Checked ? "checked=\"checked\" " : string.Empty) +
                            (database.Disabled ? "disabled=\"disabled\" " : string.Empty) +
                            "title=\"" + database.Description + "\"" +
                            " />" +
                            "<label " +
                            "for=\"DatabasesValue-" + database.Id + "\" " +
                            "title=\"" + database.Description + "\"" +
                            ">" + database.Description + "</label>" +
                            "<br />"
                            );

                        @Html.Raw(sb);
                    }
                }
            </div>
        </div>
        <div class="basicContainer1" style="float: left; width: 35%">
            <label class="small-space-bottom inline-block bold-text">Källa</label>
            <div id="divValueDataSources" class="checkboxButtonGroupSelector small-space-bottom">
                @{
                    foreach (var dataSource in PageData["DataSources"])
                    {
                        System.Text.StringBuilder sb = new System.Text.StringBuilder();
                        sb.Append(
                            "<input " +
                            "id=\"DataSourcesValue-" + dataSource.Id + "\" " +
                            "name=\"DataSourcesValue\" " +
                            "type=\"radio\" " +
                            "value=\"" + dataSource.Id + "\" " +
                            (dataSource.Checked ? "checked=\"checked\" " : string.Empty) +
                            (dataSource.Disabled ? "disabled=\"disabled\" " : string.Empty) +
                            "title=\"" + dataSource.Description + "\"" +
                            " />" +
                            "<label " +
                            "for=\"DataSourcesValue-" + dataSource.Id + "\" " +
                            "title=\"" + dataSource.Description + "\"" +
                            ">" + dataSource.Description + "</label>" +
                            "<br />"
                            );

                        @Html.Raw(sb);
                    }
                }
            </div>
        </div>
        <div class="basicContainer1 left" style="float: left; width: 20%">
            <label class="small-space-bottom inline-block bold-text">Nivå</label>
            <div id="divValueDataSelections" class="checkboxButtonGroupSelector">
                @{
                    foreach (var dataSelection in PageData["DataSelections"])
                    {
                        System.Text.StringBuilder sb = new System.Text.StringBuilder();
                        sb.Append(
                            "<input " +
                            "id=\"DataSelectionsValue-" + dataSelection.Id + "\" " +
                            "name=\"DataSelectionsValue\" " +
                            "type=\"radio\" " +
                            "value=\"" + dataSelection.Id + "\" " +
                            (dataSelection.Checked ? "checked=\"checked\" " : string.Empty) +
                            (dataSelection.Disabled ? "disabled=\"disabled\" " : string.Empty) +
                            "title=\"" + dataSelection.Description + "\"" +
                            " />" +
                            "<label " +
                            "for=\"DataSelectionsValue-" + dataSelection.Id + "\" " +
                            "title=\"" + dataSelection.Description + "\"" +
                            ">" + dataSelection.Description + "</label>" +
                            "<br />"
                            );

                        @Html.Raw(sb);
                    }
                }
            </div>
        </div>

        <div class="basicContainer2 left" style="float: left; width: 20%">
            <label class="small-space-bottom inline-block bold-text">Olycks-ID</label>
                <div id="accidentField">
                    <input type="text" name="accidentId" id="accidentId"/>
                </div>    
          </div>
    </div>
</div>

【问题讨论】:

    标签: javascript jquery user-interface


    【解决方案1】:

    你可以focus触发click后的输入:

    $('#categoryBasic').click(function () {
        $('#DatabasesValue-1').click();
        $('#DatabasesValue-1').find(':checkbox').first().focus();
    });
    

    检查sn-p:

    $('#categoryBasic').click(function() {
      $('#DatabasesValue-1').show().find(':checkbox').first().focus();
    });
    #DatabasesValue-1 {
      display: none;
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <div id='categoryBasic'>click</div>
    <div id='DatabasesValue-1'>
      <input type='checkbox'>
      <input type='checkbox'>
      <input type='checkbox'>
      <input type='checkbox'>
    </div>

    【讨论】:

    • 谢谢,但复选框刚刚被选中。当我手动单击复选框时,复选框周围会出现一个虚线正方形。然后我可以使用标签导航。当 div 可见时,我想模拟这个“虚线正方形”。
    • @Jay:看来打开的div必须在“焦点”中。因为当我在它打开后点击div,然后点击标签,它就可以了。
    • @Bryan 元素是否被点击categoryBasic 这是DatabasesValue-1 的子元素吗?
    • categoryBasic 只是一个简单的链接。
    • 你能用你拥有的 html 结构更新你的问题吗?因为这样它应该可以工作。我想还有其他原因导致问题。
    【解决方案2】:

    您是否尝试过使用tabindex 属性? tabindex docs

    或者你可以把你的代码改成这个

    $('#categoryBasic').click(function () {
        $('#DatabasesValue-1').trigger('click');
    });
    

    【讨论】:

      【解决方案3】:

      你可以试试focus,见this fiddle:

      JavaScript

      $('#categoryBasic').click(function () {
          $('.hidden').show();
          $("#DatabasesValue-1").focus();
      });
      

      HTML

      <button id="categoryBasic">
          Click me!
      </button>
      <div class="hidden">
          <input type="text"/><br/>
          <input type="text"/><br/>
          <input type="checkbox" id="DatabasesValue-1"/>
          <label for="DatabasesValue-1">Text 1</label><br/>
          <input type="checkbox" id="DatabasesValue-2"/>
          <label for="DatabasesValue-1">Text 2</label><br/>
          <input type="checkbox" id="DatabasesValue-3"/>
          <label for="DatabasesValue-1">Text 3</label><br/>
      </div>
      

      CSS

      .hidden{
          display: none;
      }
      

      【讨论】:

        猜你喜欢
        • 2014-08-22
        • 1970-01-01
        • 2014-06-09
        • 2017-01-23
        • 1970-01-01
        • 1970-01-01
        • 2018-12-14
        • 2016-09-14
        • 1970-01-01
        相关资源
        最近更新 更多