从输入中删除字符时,如何防止 keyup 事件触发两次?

Posted

技术标签:

【中文标题】从输入中删除字符时,如何防止 keyup 事件触发两次?【英文标题】:How can I prevent the keyup event fires twice when remove a character from input? 【发布时间】:2017-01-13 12:59:06 【问题描述】:

当从输入中删除预定字符时,keyup 事件会触发两次。我怎样才能防止这种情况发生?

HTML

<input type="text" id="search">

JS

var block = 
  'ch1': 
      'key':'/',
      'keycode':'191'
  ,
  'ch2': 
      'key':':',
      'keycode':'186'
  ,
  'ch3': 
      'key':'=',
      'keycode':'187'
  


$('#search').on('keyup',function()
  console.log(checkChar($(this)));
);

function checkChar($this)

  var txt  = $this.val(),
      flag = true;

  for(var i=0; i<txt.length; i++) 

    $.each(block,function(k,v)

      if (txt[i] === v.key) 
        $this.val(txt.slice(0,-1));
        flag = false;
        return false;
      

    );

  

  return flag;


JSBIN

https://jsbin.com/mirocepiqo/1/edit?html,js,output

【问题讨论】:

问题是当你松开shift键时,也会产生一个keyup事件。尝试过滤您感兴趣的键。 【参考方案1】:

event传递给函数,检查event.shiftKey,如果条件是truereturn

$('#search').on('keyup',function(e)
  var res = checkChar(e, $(this));
  if (res !== undefined) 
    console.log(res);
  ;

);

function checkChar(e, $this)
  if (e.shiftKey) 
    return
  ;
  var txt  = $this.val(),
      flag = true;

  for(var i=0; i<txt.length; i++) 

    $.each(block,function(k,v)

      if (txt[i] === v.key) 
        $this.val(txt.slice(0,-1));
        flag = false;
        return false;
      

    );

  

  return flag;



【讨论】:

这正是我想要的。谢谢

以上是关于从输入中删除字符时,如何防止 keyup 事件触发两次?的主要内容,如果未能解决你的问题,请参考以下文章

从 keyup 事件中获取角色

Javascript,input文本框内容改变时自动触发事件,不是keyup或者onchange,需要可以解决中文输入的问题

自动完成时触发的任何事件?

在 JS/jQuery 中触发 keypress/keydown/keyup 事件?

extjs中如何监听textfield的改变

IOS不触发文本框输入中文的keyup事件