除非输入值是计算结果,否则添加字符到输入

时间:2016-01-12 19:59:40

标签: javascript

我有一个JavaScript计算器,它使用以下函数在显示中添加字符:

function addChar(input, character) {
  if (input.value == null || input.value == "0"){
    input.value = character}
  else{
    input.value += character}
};

这是根据按下的按钮添加一个数字:

$.each([1, 2, 3, 4, 5, 6, 7, 8, 9, 0], function(i, e) {
  $('#button-' + e).click(function() {
    addChar(this.form.display, e);
  });
});

我遇到的问题是用户能够将数字添加到显示值的末尾 AFTER 计算(这没什么意义)。例如,假设我发现8 rad的余弦,计算器返回-0.14550003380861354。如果我之后点击一个数字键,这个数字只是附加到前一个字符串(例如,如果我点击2,则显示将显示为-0.14550003380861354 2 )。

我希望计算器只是重置并显示按下的键的值。如果按下的键是操作符,那很好,因为它允许用户使用他们刚刚获得的值。

我如何修改这些功能中的一个或两个,以便达到预期效果?

4 个答案:

答案 0 :(得分:1)

计算结果时,在输入中添加一些类,例如result,并在添加char之前检查输入是否具有此类。如果是,请清除输入并删除该类。

例如:

$.each([1, 2, 3, 4, 5, 6, 7, 8, 9, 0], function(i, e) {
  $('#button-' + e).click(function() {
    if ($(this.form.display).hasClass("result")) {
      $(this.form.display).removeClass("result").val("");
    }
    addChar(this.form.display, e);
  });
});

$("#calculate-button").click(function() {
  $(this.form.display).addClass("result");
  // do calculation
});

答案 1 :(得分:0)

您可以在计算器中添加一些“状态”属性,指示何时显示计算结果。输入事件的行为会根据计算器的当前“状态”而改变。

答案 2 :(得分:0)

您是否可以通过添加按钮逻辑输入来将输入字段更改为<input type="number" readonly="readonly" />?像:

document.getElementById("numberInput").setAttribute("readonly","readonly");

答案 3 :(得分:0)

我想说使用布尔变量(例如:isResult)来存储信息,因为这是结果与否。如果这是结果,则替换为新字符。你的功能看起来像这样:

    function addChar(input, character) {
  if (input.value == null || input.value == "0" || isResult){
    input.value = character}
  else{
    input.value += character}
};