Калькулятор выдает консольный журнал, но на экране ничего не отображается
Мне нужно построить этот калькулятор, используя JavaScript/jquery, однако на экране не будет отображаться никаких цифр, когда я нажимаю на кнопки, которые отображаются в журнале консоли без ошибок. Мне просто нужна помощь, чтобы выяснить, как отобразить числа на экран любая помощь приветствуется
function init(){
console.log('start');
var num1 = 0;
var num2 = 0;
var op = '';
var ON = '';
$('.digit, .operator orange').click(function(){
var ID = this.id;
console.log(ID);
calculator(this);
});
function calculator(obj){
console.log(ON);
var ID = obj.id;
var type = obj.classList[1];
if(type === 'digit'){
if (ON == true){
$('#calculation').empty();
}
$('#calculation').append(ID);
console.log(ID + '!')
}else if(type === 'operator orange'){
op =obj.textContent;
if(num1 == 0){
num1 = $('#calculation').text();
}else{
num2 = $('#calculation').text();
num1 = eval(num1 + op + num2);
}
$('#calculation').empty();
}else if (type ==='operator orange'){
num2 = $('#calculation').text();
num1 = eval(num1 + op + num2);
$('#calculation').empty();
$('#calculation').append(num1);
ON = true;
num1= 0;
num2= 0;
}else if(type === 'clear'){
$('#calculation').empty();
num1=0;
num2=0;
ON = false;
}
}
}
$(document).ready(init);
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.2/jquery.min.js"></script>
<title>Calculator</title>
<link rel="stylesheet" type="text/css" href="reset.css" />
<link rel="stylesheet" type="text/css" href="styles.css" />
</head>
<body>
<div id="calculator">
<div id="calculation">0</div>
<div class="buttons">
<ul>
<li id="clear" class="clear darkgray">C</li>
<li class="empty darkgray"> </li>
<li class="empty darkgray"> </li>
<li id="/" class="operator orange">/</li>
</ul>
<ul>
<li id="7" class="digit">7</li>
<li id="8" class="digit">8</li>
<li id="9" class="digit">9</li>
<li id="*" class="operator orange">*</li>
</ul>
<ul>
<li id="4" class="digit">4</li>
<li id="5" class="digit">5</li>
<li id="6" class="digit">6</li>
<li id="-" class="operator orange">-</li>
</ul>
<ul>
<li id="1" class="digit">1</li>
<li id="2" class="digit">2</li>
<li id="3" class="digit">3</li>
<li id="+" class="operator orange">+</li>
</ul>
<ul>
<li id="0" class="digit wide nobottom">0</li>
<li id="." class="digit nobottom">.</li>
<li id= "=" class="equals orange nobottom">=</li>
</ul>
</div>
</div>
<script src="js.js"></script>
</body>
</html>
2 ответа
Проблема здесь
$('#calculation').append(num1);
Изменить.append на.text
var type = obj.classList[1];
никогда не вернется digit
, поскольку этот класс находится в позиции 0. Вместо этого используйте атрибут (data-type="digit"
) или же classList.contains("digit")
С помощью classList.contains
При использовании class
Атрибут для целевых элементов и тип или состояние магазина, я бы посоветовал использовать какой-то префикс, такой как js-
, чтобы дифференцировать классы стиля и интерактивность.
var div1 = document.getElementById("div1");
var div2 = document.getElementById("div2");
var div3 = document.getElementById("div3");
console.log("Div 1, type is digit:", div1.classList.contains("digit"));
console.log("Div 2, type is digit:", div2.classList.contains("digit"));
console.log("Div 3, type is digit:", div3.classList.contains("digit"));
<div id="div1" class="test digit something-else">1</div>
<div id="div2" class="digit something-else test">2</div>
<div id="div3" class="something-else test">3</div>
Используя data-
атрибут
Сохранение состояния / типа в элементе может быть сделано в пользовательском атрибуте. Пользовательские атрибуты всегда начинаются с префикса data-
, Основные преимущества:
- Они не сталкиваются со стилем
- Вы можете повторно использовать один атрибут для всех типов
var div1 = document.getElementById("div1");
var div2 = document.getElementById("div2");
var div3 = document.getElementById("div3");
var getType = function(el) {
return el.getAttribute("data-type");
}
console.log("Div 1, type is:", getType(div1));
console.log("Div 2, type is:", getType(div2));
console.log("Div 3, type is:", getType(div3));
<div id="div1" data-type="digit" class="test something-else">1</div>
<div id="div2" data-type="digit" class="something-else test">2</div>
<div id="div3" data-type="otherType" class="something-else test">3</div>