Помогите оптимизировать и доделать скрипт
Здравствуйте. Имеется такой рабочий код:
<div style="float:left;padding:1px;margin:10px;width:160px;height:257px;background-color:gray;"> <div id="b1" style="float:left;margin:1px;width:30px;height:30px;background-color:silver;"> <input type="button" style="width:30px;height:30px;background-color:rgba(255, 255, 255, 0);" onclick="reverse1()"> </div> <div id="b2" style="float:left;margin:1px;width:30px;height:30px;background-color:silver;"> <input type="button" style="width:30px;height:30px;background-color:rgba(255, 255, 255, 0);" onclick="reverse2()"> </div> <div id="b3" style="float:left;margin:1px;width:30px;height:30px;background-color:silver;"> <input type="button" style="width:30px;height:30px;background-color:rgba(255, 255, 255, 0);" onclick="reverse3()"> </div> <div id="b4" style="float:left;margin:1px;width:30px;height:30px;background-color:silver;"> <input type="button" style="width:30px;height:30px;background-color:rgba(255, 255, 255, 0);" onclick="reverse4()"> </div> <div id="b5" style="float:left;margin:1px;width:30px;height:30px;background-color:silver;"> <input type="button" style="width:30px;height:30px;background-color:rgba(255, 255, 255, 0);" onclick="reverse5()"> </div> </div> <div style="float:left;padding:1px;margin-left:20px;width:300px;height:256px;"> <br> <span id="t1">0</span><span id="t2">0</span><span id="t3">0</span><span id="t4">0</span><span id="t5">0</span><br> </div>
<script type="text/javascript">
function reverse1() {
var e = document.getElementById("t1");
var b = document.getElementById("b1");
var txt = e.textContent || e.innerText;
var box = document.getElementById('b1').style.backgroundColor;
var txt2 = '0';
if(txt != txt2){var newtxt = '0';}
else{var newtxt = '1';}
document.getElementById('t1').innerHTML = newtxt;
var box2 = 'forestgreen';
if(box != box2){var newbox = 'forestgreen';}
else{var newbox = 'silver';}
document.getElementById('b1').style.backgroundColor = newbox;
};
function reverse2() {
var e = document.getElementById("t2");
var b = document.getElementById("b2");
var txt = e.textContent || e.innerText;
var box = document.getElementById('b2').style.backgroundColor;
var txt2 = '0';
if(txt != txt2){var newtxt = '0';}
else{var newtxt = '1';}
document.getElementById('t2').innerHTML = newtxt;
var box2 = 'forestgreen';
if(box != box2){var newbox = 'forestgreen';}
else{var newbox = 'silver';}
document.getElementById('b2').style.backgroundColor = newbox;
};
function reverse3() {
var e = document.getElementById("t3");
var b = document.getElementById("b3");
var txt = e.textContent || e.innerText;
var box = document.getElementById('b3').style.backgroundColor;
var txt2 = '0';
if(txt != txt2){var newtxt = '0';}
else{var newtxt = '1';}
document.getElementById('t3').innerHTML = newtxt;
var box2 = 'forestgreen';
if(box != box2){var newbox = 'forestgreen';}
else{var newbox = 'silver';}
document.getElementById('b3').style.backgroundColor = newbox;
};
function reverse4() {
var e = document.getElementById("t4");
var b = document.getElementById("b4");
var txt = e.textContent || e.innerText;
var box = document.getElementById('b4').style.backgroundColor;
var txt2 = '0';
if(txt != txt2){var newtxt = '0';}
else{var newtxt = '1';}
document.getElementById('t4').innerHTML = newtxt;
var box2 = 'forestgreen';
if(box != box2){var newbox = 'forestgreen';}
else{var newbox = 'silver';}
document.getElementById('b4').style.backgroundColor = newbox;
};
function reverse5() {
var e = document.getElementById("t5");
var b = document.getElementById("b5");
var txt = e.textContent || e.innerText;
var box = document.getElementById('b5').style.backgroundColor;
var txt2 = '0';
if(txt != txt2){var newtxt = '0';}
else{var newtxt = '1';}
document.getElementById('t5').innerHTML = newtxt;
var box2 = 'forestgreen';
if(box != box2){var newbox = 'forestgreen';}
else{var newbox = 'silver';}
document.getElementById('b5').style.backgroundColor = newbox;
};
</script>
Вопрос - как можно через цикл for упростить работу скрипта (если кнопок будет больше и на каждую писать свою функцию - будет большая программа) И второй вопрос, как сделать кнопку сброса всех значений и нажатых кнопок в исходное состояние? Спасибо. JS знаю плохо, изучаю для своих сайтов по форумам |
делегирование
robotehnika18,
https://learn.javascript.ru/event-delegation
<!DOCTYPE HTML>
<html>
<head>
<title>Untitled</title>
<style type="text/css">
.block {
display: flex;
}
.table {
display: grid;
grid-template-columns: repeat(5, 1fr);
grid-auto-rows: 30px;
padding: 1px;
margin: 10px;
width: 160px;
height: 257px;
background-color: gray;
}
.table>input {
width: 30px;
height: 30px;
background-color: silver;
}
.table>input.active {
background-color: forestgreen;
}
.show {
grid-template-columns: repeat(5, 1fr);
padding: 1px;
margin: 10px;
width: 40px;
height: 257px;
}
[type="reset"] {
height: 40px;
margin: 10px;
}
</style>
</head>
<body>
<div class="block">
<div class="table">
<input type="button">
<input type="button">
<input type="button">
<input type="button">
<input type="button">
<input type="button">
<input type="button">
<input type="button">
<input type="button">
<input type="button">
</div>
<div class="show">
<span>0</span><span>0</span><span>0</span><span>0</span><span>0</span>
<span>0</span><span>0</span><span>0</span><span>0</span><span>0</span>
</div>
<button type="reset">reset</button>
</div>
<script>
document.addEventListener('DOMContentLoaded', function() {
let inputs = Array.from(document.querySelectorAll('.table>input'));
let spans = Array.from(document.querySelectorAll('.show>span'));
document.querySelector('.block').addEventListener('click', function(event) {
let target = event.target.closest('.table>input');
if (target) {
let index = inputs.indexOf(target);
let txt = +inputs[index].classList.toggle('active');
let span = spans[index];
if (span) span.textContent = txt;
}
let reset = event.target.closest('.block>[type="reset"]');
if (reset) {
inputs.forEach((input, i) => {
input.classList.remove('active');
let span = spans[i];
if (span) span.textContent = 0;
})
}
})
})
</script>
</body>
</html>
|
Благодарю!
|
| Часовой пояс GMT +3, время: 09:14. |