【问题标题】:enable / disable key press event based on focus in input box根据输入框中的焦点启用/禁用按键事件
【发布时间】:2017-07-18 20:50:50
【问题描述】:
  • 如果输入框没有焦点,应该触发keypress事件
  • 如果输入框有焦点,按键事件应该被禁用,并且 应该允许输入文字。
  • 我尝试过对焦和模糊,但没有奏效。

HTML

<div class="button">
<button class="btn">1</button>
<button class="btn">2</button>
<button class="btn">3</button>

</div>

<div class="form">
<form action="" id="submit">
  <input type="text" id="num" number/>
</form>
</div>

<div id="show"></div>

JQUERY

$(function($){
        //on click
    $('.btn').click(function(){
                var me = $(this);
        $('#show').html(me.text());
    });
    //on keypress
    $(window).keypress(function(k){         
            switch (k.keyCode) {                
                // user presses the "1"
            case 49:
             $('#show').html(1);
               break;           
                // user presses the "2"
            case 50:
            $('#show').html(2);
               break;

                // user presses the "3"
            case 51:
            $('#show').html(3);
               break;
          }
    });

    //on submit
    $('#submit').submit(function(e){
        e.preventDefault();
      var data = $('#num').val();
      $('#show').html(data);
      $('#num').val('');
    })
});

JSFiddle

【问题讨论】:

  • 您是否尝试将k.preventDefault(); 作为处理函数的第一行?

标签: javascript jquery


【解决方案1】:

尝试在按键事件中检查输入框的焦点属性,例如:

if (!$('#num').is(':focus')) {
  switch (k.keyCode) {
    case 49:
      $('#show').html(1);
      break;
      // user presses the "2"
    case 50:
      $('#show').html(2);
      break;
      // user presses the "3"
    case 51:
      $('#show').html(3);
      break;
    default:
  }
}

您可以在我更新的fiddle 中查看。

【讨论】:

    【解决方案2】:

    在默认条件下尝试event.preventDefault().on 输入按键事件

    更新

    对于输入中的所有键阻止,在按键功能的第一行添加event.preventDefault()

    Updated fiddle

    $(window).keypress(function(k) {
        k.preventDefault() //its prevent all keyinput
      switch (k.keyCode) {
    
        case 49:
          $('#show').html(1);
          break;
          // user presses the "2"
        case 50:
          $('#show').html(2);
          break;
    
          // user presses the "3"
        case 51:
          $('#show').html(3);
          break;
        default:
          k.preventDefault() //its prevent keypress other than 1,2,3
      }
    });
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多