Показать сообщение отдельно
  #14 (permalink)  
Старый 01.12.2016, 14:08
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от allexmak
мне нужно при нажатии поменять value совсем другой кнопки
Зачем? Вы либо поясните логику чего надо, либо показывайте код соответствующий. У вас по коду в вопросе что - куча условий, которые определяют состояние нажатой кнопки и изменяется ее состояние, так?

Код вам показывает как это "человечнее" делать. Во-первых, к примеру у вас дома выключатель света по умолчанию в положении выключен. Чтобы включить свет вы "спрашиваете" выключатель включен ли им свет или нет? Нет, вы просто щелкаете им - свет включился, еще раз щелкнули, выключился, опять щелчок, опять свет и т.д. Все на автомате, схоже с работой триггера, которому вы изменяете состояние, а он управляет нагрузкой.

Так кто же вам мешает по такому же принципу и управлять состоянием кнопок в коде, без всяких IF, которые ну просто не приделах в данном случае.

Во-вторых по коду предложенному, детально, по русски, а он соответствует заявленному в вопросе:

document.addEventListener('DOMContentLoaded', function() ... - обработчик обрабатывающий событие загрузки документа, когда DOM сформирован и будет доступные и #led, и прочее нас интересующее.

document.querySelector('#led').addEventListener('c lick', function(e) - это самое интересное, это делегирование обработки щелчков по кнопкам их общему родительскому элементу. Если в него прописать подобным образом теги параграфов, кнопок, то скрипт обработчик щелчков по ним не надо писать, их события также будут обработаны данным обработчиком.

Цикл while в данном обработчике определяет целевой элемент, то есть тот по которому щелкнули, делая обход от целевого элемента вверх до родителя - DIV, и если это кнопка if(bt.tagName == 'BUTTON'), то берем ее состояние, которое хранит ее свойство value, и инвертируем его посредством операции XOR (исключающее ИЛИ). Измененное состояние записываем в свойство кнопки, на основании его как индекса массива получаем текст и пишем его куда требуется.

Все, это вся работа и так как вы и хотели. Вопрос - зачем писать код изменяющий состояние текущей кнопки (по которой щелкнули), в котором нужно изменять состояние кнопки (кнопок), по которым вообще не производился щелчок? Где логика? Если скрипт должен изменять не состояние текущей кнопки, а, к примеру, состояние нескольких кнопок, и они зависят от номера нажатой кнопки, то где описание данной задачи?

И в третьих - setInterval(function()... и запись в '#test', это лишь для того, чтобы просмотреть работу кода здесь, зачем вы это все постоянно копируете? К тому же, выгодно ли все-таки тревожить сервер постоянно этими кнопками? Допустим, сервер должен реагировать на изменение состояний кнопок. Но в таком случае выгоднее делать запрос сервера не каждую секунду, а только тогда когда состояние какой либо кнопки изменилось. Гонять сервер запросами просто так это ведь лишено всякого смысла, вряд ли кнопки кто-то будет щелкать с частой менее 1 секунды.

Последний раз редактировалось laimas, 01.12.2016 в 14:11.
Ответить с цитированием