Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 23.10.2024, 19:26
Новичок на форуме
Отправить личное сообщение для robotehnika18 Посмотреть профиль Найти все сообщения от robotehnika18
 
Регистрация: 23.10.2024
Сообщений: 2

Помогите оптимизировать и доделать скрипт
Здравствуйте. Имеется такой рабочий код:

<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 знаю плохо, изучаю для своих сайтов по форумам
Ответить с цитированием
  #2 (permalink)  
Старый 24.10.2024, 02:21
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,129

делегирование
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>
Ответить с цитированием
  #3 (permalink)  
Старый 24.10.2024, 05:13
Новичок на форуме
Отправить личное сообщение для robotehnika18 Посмотреть профиль Найти все сообщения от robotehnika18
 
Регистрация: 23.10.2024
Сообщений: 2

Благодарю!
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите составить скрипт для списка Новенькая Общие вопросы Javascript 9 10.09.2012 06:58
Помогите! "Не работает скрипт отсчета времени! Я нуб) Dobson Общие вопросы Javascript 4 28.05.2011 18:20
Скрипт условий if, помогите разобраться lyuis Общие вопросы Javascript 8 28.12.2010 21:21
Помогите создать скрипт замены картинок при наведении курсора. SantaS Я не знаю javascript 3 05.06.2009 12:59
Люди, помогите адаптировать скрипт под Оперу KiLLk Opera, Safari и др. 1 01.06.2009 01:05