为什么方程的价值最终未定义?

时间:2015-11-01 13:51:31

标签: javascript jquery undefined

我在JS& amp;编写简单的计算器jQuery和我遇到了奇怪的行为。在下面的代码中,您会看到变量 equation ,其中包含在计算器上按下的每个数字。然后我使用eval()来评估。

问题是, equation 变量的值是你期望但最终 undefined 的结果,并且无法找出原因。

整个项目:http://codepen.io/ketus/full/XmYRoV/

提前感谢您的帮助!

PS:我知道关于eval()的一般意见。它仅用于测试,所以我可以移动。在解决 undefined 的问题后,我将实现自己的解决方案。

$(document).ready(function() {  
  
  var equation = '';
  var input = $('h2[data-value]');  
  var info = $('#info');
  //get keys
  var keys = $('.key').filter(function() {
    return $(this).data('key');
  }).get();  
  
  //get operators
  var operators = $('.operator').filter(function() {
    return $(this).data('operator');
  }).get();    
  
  //Clearing input
  $('.clear').click(function(){
    equation = '';
    input.html('');
    info.html('');
  });  
  
  //user press keys, check if correct after each click 
  $('.key').click(function(){
    equation += $(this).data('key');  
    //evaluateEquation();
    input.html(equation);    
  });   
  
  //showing result
  $('a[data-calc]').click(function(){
    input.html(eval(equation.toString()));
  }); 
  
  // rules for equation to be correct
  //function evaluateEquation()  {    
  //}
  
  function calculate(){    
    if(equation.length > 0){    
      return eval(equation);
    } else { 
      info.html('Enter something!');
      return '';
    } 
  }
  
});

1 个答案:

答案 0 :(得分:3)

主要问题是用户按下事件处理程序。如果按下data('key'),则不应附加=。例如,您可以像这样排除此按钮:

  //user press keys, check if correct after each click 
  $('.key:not([data-calc])').click(function(){
    equation += $(this).data('key');  
    input.html(equation);    
  });   

演示: http://codepen.io/anon/pen/qOKwOE?editors=101