【问题标题】:Adding keypress Events that use an existing function添加使用现有功能的按键事件
【发布时间】:2016-09-11 23:36:56
【问题描述】:

我使用了一个在点击事件时激活的功能。我想使用按键事件来做同样的事情。

function addToText(target) {

  var exp = target.target;
  //alert(exp.value);
  if (newExp) {

    //clearText();
    document.getElementById("expression").value = exp.value;
    newExp=false;

  } 

  else
    document.getElementById("expression").value = document.getElementById("expression").value + exp.value;

}

这是使用的功能。我如何修改它以用于按键事件。目前,它最初不起作用(对于按键事件)。但是单击一次后,任何按键都会返回与之前单击相同的数字。

完整代码在这里:http://codepen.io/jpninanjohn/pen/JXVpYb?editors=1010

【问题讨论】:

    标签: javascript dom-events keyboard-events


    【解决方案1】:

    这是你的最终解决方案,我测试 charcode 是否在 48 到 57 之间,这是什么意思,0 到 9 之间的数字。

       document.addEventListener('keypress', function(e){
          if (e.which >= 48 && e.which <= 57)
            document.getElementById("expression").value+= String.fromCharCode(e.which);
        });
    

    【讨论】:

    • 好的。这有效,但只有在我点击计算器内部的某个地方之后。
    • 你确定吗?我已经测试了您编辑的 codepen,即使我在计算器外部单击并开始输入,它也能正常工作。
    • 是的,我再次检查了它,它也适用于外部点击。但是为什么最初的点击???
    【解决方案2】:

    你可以使用这个功能-

    window.onkeyup = function(e) {
       var key = e.keyCode ? e.keyCode : e.which;
     document.getElementById("expression").value += key-48; //for getting the number
    
      alert(key);
       if (key == 38) {
          //whatever
       }else if (key == 40) {
          // whatever
       }
    }
    

    source

    你需要在 = 后面加上 +

    document.getElementById("expression").value+= 
    

    而不是-

    document.getElementById("expression").value=
    

    【讨论】:

    • var key = e.keyCode ? e.keyCode : e.which;这条线是做什么的??
    【解决方案3】:

    你必须为 keyPress 事件添加一个不同的函数,因为 keypress 事件获取不同的按键值,而不是 target.target

    function addToTextKeypress(event) {
    
      var exp = String.fromCharCode(event.keyCode);
      //alert(exp);
      if (newExp) {
    
        //clearText();
        document.getElementById("expression").value = exp;
        newExp=false;
    
      } 
    
      else
        document.getElementById("expression").value = document.getElementById("expression").value + exp;
    
    }
    

    稍后您需要删除 exp.value,因为它具有直接值

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多