按下退格键或删除键时如何执行操作

How to do something when backspace or delete is pressed

本文关键字:何执行 执行 操作 删除      更新时间:2023-09-26

所以当我按下退格键或删除时,我很难让代码执行某些操作。

我的代码运行得很好。它运行以下代码,更新多个文本输入字段的大小和值。

它调用compute(),后者通过updateAllFields()多次调用update()

  function compute(input,number){
    var decider = String(input.value);
    updateAllFields(decider,number);
  }
  function update(label,convert,decider,number){
    var updater = document.getElementById(label);
    updater.value = parseInt(decider, number).toString(convert);
    updater.style.width = ((updater.value.length + 1) * 12.5) + 'px';
  }
  function updateAllFields(decider,number){
    update('binary',2,decider,number);
    update('octal',8,decider,number);
    update('decimal',10,decider,number);
    update('hexadecimal',16,decider,number);
  }

现在,一切都很顺利。我遇到了一个问题,当删除整个字段时,我会得到NaN,并且不能再编辑文本字段,除非我胜过NaN

情况是,如果用户点击"Ctrl+home",然后退格(擦除整个字段),就会出现NaN。相反,我想要的是,当NaN出现时,所有文本输入都会重置为与占位符显示时相同的大小和外观。

我查了一下,发现了以下内容:

var input = document.getElementById('display');
input.onkeydown = function() {
    var key = event.keyCode || event.charCode;
    if( key !== 8 && key !== 46 )
        return true;
};

它不起作用。我甚至尝试替换return false,以读取我的替换代码:

  function refresh(label,number){
    var refresher = document.getElementById(label);
    refresher.value = '';
    refresher.size = number;
  }
  function refreshAllFields(){
        refresh('binary','3');
        refresh('octal','2');
        refresh('decimal','4');
        refresh('hexadecimal','8');
      }

这是行不通的。我做错了什么?如果一个字段的整个文本字段都被删除,我如何才能将字段重置为原始状态?

您不需要降低出错的可能性。你需要防止任何错误。只需验证输入数据,就不会得到NaN

如果输入是整数,只需在compute中添加一张支票:

function compute(input,number){
    var decider = String(input.value);
    if (isNumeric(decider)) 
    {
        // do something else
        decider = "0"; // for example
    }
    updateAllFields(decider, number);
}

其中CCD_ 3是确定字符串是否表示数字的函数。有很多方法可以做到这一点,例如:

function isNumeric(value)
{
    if (isNaN(value)) {
         return false;
    }
    var x = parseFloat(value);
    return (x | 0) === x;
}

此外,您可以停止将decidernumber作为字符串传递给每个函数:

function compute(input, number){
    if (isNumeric(input.value))
    {
        updateAllFields(parseInt(input.value, number)); // val is a Number now
    } else {
        updateAllFields(0); // for example
    }       
}
function update(label,convert,val){
    var updater = document.getElementById(label);
    updater.value = val.toString(convert);
    updater.style.width = ((updater.value.length + 1) * 12.5) + 'px';
}
function updateAllFields(val) {
    update('binary',2,val);
    update('octal',8,val);
    update('decimal',10,val);
    update('hexadecimal',16,val);
}