Uncaught TypeError: this.getAttribute не является функцией
В цикле for
this
относится к window
.this
будет ссылаться на элемент только внутри обработчика события onclick
.
Кроме того, вы присваиваете атрибут onclick
кнопки внутри цикла for
как возвращаемое значение calc
который не определен.Вместо этого вы должны объявить op
как глобальную переменную и добавить прослушиватель событий для кнопки равенства, чтобы вычислить результат на основе глобальной переменной op
.
На слегка не связанной ноте не следует использоватьнесколько if
операторов при сравнении значения одной переменной;используйте структуру if
, else if
и else
или оператор switch
.
Рабочая демонстрация:
var first = document.querySelector('.first');
var second = document.querySelector('.second');
var result = document.querySelector('.result');
var op;
var btn = document.querySelector('.btn');
btn.addEventListener('click', calc);
var buttons = document.querySelectorAll('input[data-op]');
[].slice.call(buttons).forEach(function(btn){
btn.addEventListener('click', function(){
op = this.getAttribute('data-op');
})
});
function calc() {
var val1 = parseInt(first.value);
var val2 = parseInt(second.value);
var res;
if(op==null){
res = "No operation!"
} else if(op === '+') {
res = val1 + val2;
} else if(op === '-') {
res = val1 - val2;
} else if(op === '*') {
res = val1 * val2;
} else if(op === '/') {
res = val1 / val2;
}
result.innerHTML = res;
}
<input type='text' class='first'>
<input type='button' value='+' class='plus' data-op='+'>
<input type='button' value='-' class='minus' data-op='-'>
<input type='button' value='*' class='mult' data-op='*'>
<input type='button' value='/' class='divide' data-op='/'>
<input type='text' class='second'>
<input type='button' value='=' class='btn'>
<span class='result'></span>