聚焦后自动聚焦

时间:2019-05-23 08:03:15

标签: jquery html

我为移动网站编写了一些简单的jQuery代码。如果我触摸删除按钮,它将清除输入并聚焦在输入区域。但是,它会在focus()

之后自动聚焦

$(document).on('focusin', '#testInput', function() {
  console.log('in')
});

$(document).on('focusout', '#testInput', function() {
  console.log('out')
});

$(document).on('touchstart', '#deleteButton', function() {
  console.log('touchs')
  $('#testInput').val('').focus();
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<div id="wrap">
  <div class="title">
    <span>MOBILE TEST</span>
  </div>
  <div class="content">
    <input type='text' id="testInput" name="testInput" class="input_text">
    <button id="deleteButton" type="button" class="delete_button">x</button>
  </div>
</div>

1 个答案:

答案 0 :(得分:0)

  1. 为什么不使用tap事件?这是用户的标准 互动。

    您需要记住的是用户交互 从活动元素中夺走焦点。没有任何魔法 背后的“事件触发”。最多,许多的顺序 touchstartmousedownclicktap,依此类推...是 取决于浏览器,需要一些怪癖才能正常工作 跨浏览器。您还应该使用tap事件,因为 例如,用户应该能够将手指从 取消按钮,什么也不会发生。

  2. 除此之外,如果您绝对坚持使用touchstart和您的 按钮就像一种图形输入,不需要单击 或任何事件,请尝试执行此操作,看看它是否可以正常工作:

    $('#deleteButton').on('touchstart', function() {
      $('#testInput').val('').focus();
      return false;
    });
    
  3. 但是在您的示例中,您正在使用event delegation。读这个: What is DOM Event delegation?

    因此,如果您需要event delegation。还有必要停止 事件冒泡:

    $(document).on('touchstart', '#deleteButton', function(e) {
      $('#testInput').val('').focus();
      return false;
    });
    $(document).on('touchend', '#deleteButton', function(e) {
      return false;
    });
    

最终,这是jQuery事件处理程序中有关return false的很好的解释:

  

event.preventDefault() vs. return false