Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Давно не могу понять (https://javascript.ru/forum/dom-window/34617-davno-ne-mogu-ponyat.html)

hoax 12.01.2013 10:53

Давно не могу понять
 
вот у нас код


http://learn.javascript.ru/play/tuto...gua/index.html

Там есть вот это

function highlight(node) {
  if (highlightedCell) {
    highlightedCell.style.backgroundColor = '';
  }
  highlightedCell = node;
  node.style.backgroundColor = 'red';
}


Скрипт же читается сверху вниз, а тут у нас вначале идет

if (highlightedCell)

НО highlightedCell на данном этапе всего лишь переменаая, я не понимаю почему, она действует как td, ведь td она становится после if

highlightedCell = node;



Т.е. если сделать так, работать не будет


function highlight(node) {
 
  highlightedCell = node;
  node.style.backgroundColor = 'red';

 if (highlightedCell) {
    highlightedCell.style.backgroundColor = '';
  }


}


Как так?

hoax 12.01.2013 11:03

И как вопрос, почему при нажатии на тот же самый td (который уже красный), подсветка не спадает

рони 12.01.2013 11:31

hoax, этот код
function highlight(node) {
 
  highlightedCell = node;
  node.style.backgroundColor = 'red';

 if (highlightedCell) {
    highlightedCell.style.backgroundColor = '';
  }


}

равен этому
function highlight(node) {
     node.style.backgroundColor = '';
}

рони 12.01.2013 11:40

Цитата:

Сообщение от hoax
И как вопрос, почему при нажатии на тот же самый td (который уже красный), подсветка не спадает

Скрипт работает так: элемент нажатый в прошлый раз обесцветить, вновь нажатый подсветить красным.
Поэтому красным будет тот на который нажали в последний раз.

hoax 12.01.2013 16:53

Я понимаю что равен этому

function highlight(node) {
node.style.backgroundColor = '';
}


Но почему это не работает хз.

Я понимаю это так

Когда скрип дойдет до == 'TD' вызовет ф-ю highlight(клик)

function highlight(node) {
 
 if (highlightedCell) { // Если (ПУСТАЯ переменная существует) 
    highlightedCell.style.backgroundColor = ''; // выводим стандартный цвет
  } 

 highlightedCell = node; // копируем TD в переменную, и тут БУМ! Она становится TD!
  node.style.backgroundColor = 'red'; // тут TD окрашивается в красный при клике




}



Т.е. то что после if понятно, там где происходит копирование, до него - нет((

hoax 13.01.2013 00:51

Так что же в ней находится?)

var highlightedCell;

if (highlightedCell) {.....}

Как именно это понять? Она же не копирует ничего. Там ничего нет, всмысле не строки , не числового порядки и не логических значений.

Здесь не происходит копирование TD в эту переменную (копирование позже), тогда каким образом она работает, если она НЕ ПРИВЯЗАНА ни к чему.


Ну как-то так, моя извращенная логика)

nerv_ 13.01.2013 01:11

Цитата:

Сообщение от hoax
Так что же в ней находится?)

1. отладчик для чего придумали?

2. в ней находится ссылка на предыдущую ячейку
Цитата:

Сообщение от рони
Скрипт работает так: элемент нажатый в прошлый раз обесцветить, вновь нажатый подсветить красным.

сколько еще раз об этом сказать?

тыкаем 2 и более раз по ячейкам
http://learn.javascript.ru/play/uDkZU


Часовой пояс GMT +3, время: 03:47.