【问题标题】:Maintaining focus on input box when virtual keypad icon is clicked单击虚拟键盘图标时保持对输入框的关注
【发布时间】:2015-12-03 11:41:40
【问题描述】:

我有一个输入框,里面有一个图标,单击该图标会显示一个用于重音字母的虚拟键盘。该代码运行完美,只是每当单击图标(或虚拟键盘上的任何按钮)时,输入框都会失去焦点。这是 HTML:

<div class="input-group col-md-4 col-md-offset-4">
          <input id="word" type="textbox" placeholder="Enter your word here..." class="form-control input-lg lookup-field lookup-field-single" onMouseOver="$(this).focus();" required>
          <span class="fa fa-keyboard-o fa-2x kb-icon" onclick="toggler('virtualkeypad', this);"></span>
          <span class="input-group-btn"><button class="btn btn-lg btn-primary lookup-submit" type="button" id="lookup"  onclick="lookup()">Lookup</button></span>
        </div>

        <div id="virtualkeypad" class="btn-group keypad-hidden col-md-offset-4">
          <button class="btn btn-lg first-btn" type="button" onClick="spl_character('á');">á</button>
          <button class="btn btn-lg" type="button" onClick="spl_character('é');">é</button>
          <button class="btn btn-lg" type="button" onClick="spl_character('í');">í</button>
          <button class="btn btn-lg" type="button" onClick="spl_character('ó');">ó</button>
          <button class="btn btn-lg" type="button" onClick="spl_character('ú');">ú</button>
          <button class="btn btn-lg" type="button" onClick="spl_character('ü');">ü</button>
          <button class="btn btn-lg last-btn" type="button" onClick="spl_character('ñ');">ñ</button>
        </div>

我尝试在 JS 中添加代码以重新获得焦点 (document.getElementById("word").focus();),如下所示:

toggler = function (eid, eclass) {
  document.getElementById("word").focus();
  $("#" + eid).toggleClass('keypad-hidden');
  $(eclass).toggleClass('keypad-shown');
}

这确实会在点击时重新获得焦点;但是,在鼠标按钮保持按下期间,仍然会出现短暂的失焦。为了解决这个问题,我对 HTML 文件中的 kb-icon div 使用了 onmousedown 事件,但仍然没有运气。我什至尝试过这样的事情:

$('.kb-icon').addEventListener("mousedown", function(){
 document.getElementById("word").focus();
});

即使这样也没有用。为了更好地说明问题,有问题的输入框(#word)在不活动时设置为黄色背景,在使用时设置为白色。现在假设您已准备好输入内容,并且光标位于输入框内。该框将是白色的,因为它处于活动状态。即使单击虚拟键盘图标,它也应该保持这种状态。但是,当您将鼠标指向虚拟键盘图标时,框会变成黄色(就像失焦时一样),然后在释放鼠标的那一刻又变回白色(焦点)。知道可能出了什么问题吗?

【问题讨论】:

    标签: javascript jquery html css twitter-bootstrap-3


    【解决方案1】:

    函数切换器中的参数类是保留标识符。此外,不建议对不同元素使用相同的 id,在您的情况下,按钮会重复“id=key”..

    请参阅下面的更新代码,它将焦点设置到输入

    <script type="text/javascript">
    toggler = function (id, elclass) {
      document.getElementById("word").focus();
      $("#" + id).toggleClass('keypad-hidden');
      $(elclass).toggleClass('keypad-shown');
    }
    </script>
    

    【讨论】:

    • 这无助于解决手头的问题。感谢您建议对整个代码进行更正,但我在这里担心的是在kb-icon 上的mousedown 事件期间保持对输入框(lookup-field)元素的关注。
    • 就像我在问题中所说的那样,“在按住鼠标按钮的时间内,仍然会有短暂的失焦。”同样的情况也发生在你的小提琴中。在鼠标按下键盘图标的整个过程中,输入框始终处于失焦状态。仅当释放鼠标按钮时焦点才会返回。
    • @sandeeps:感谢您的提琴。问题仍然存在。为了看到我在说什么,只需单击键盘图标并继续按住而不释放鼠标。您会注意到在mousedown 的整个持续时间内,焦点始终远离输入框。这是我要防止的。即使在mousedown 事件期间,我也需要将注意力集中在盒子上。虚拟键盘上的按键也是如此。当单个特殊字符键位于 mousedown 事件中时,焦点不应离开输入框。
    • 我认为用户不会长时间按住 keypress 或 mousedown 事件。我觉得你想通过同时使用离合器和制动器来推动汽车前进。
    猜你喜欢
    • 2017-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-09
    • 2016-02-15
    • 2015-07-09
    • 2012-03-11
    相关资源
    最近更新 更多