JavaScript

Хотел в учебных целях написать простейший скрипт, но что-то не ладится. Что не так?

Вот имеем страничку
http://floralib.msk.ru/exp2.html
На ней три фото и три строчки.
Хотел понять как при клике по фото выводить название в строчки справа.
Допустим кликаем по верхнему фоту с id="a" и в строчку vid с id="vid" попадает название фото: Кипрей.
Но видать не тем путем иду?
Павел Чертов
Павел Чертов
98 020
1) document.getElementById(n)
Начнем с того, что разберемся, что делает функция getElementById(строка). Она ищет в документе нод с id, равным значению переданной в нее строки. Затем она возвращает элемент.
В твоей строке n не определено, поэтому при вызове функции будет ошибка. Сам же вызов возвращает значение в никуда.
Если ты хочешь получить элемент и работать с ним, то нужно результат работы функции записывать куда-то.
var element = document.getElementById('id');

2) if (n=='a')
Здесь ты опять сравниваешь неопределенную переменную со строкой а. Скорее всего связано с тем, что ты не совсем понял, как работает предыдущая строчка. Если ты хочешь проверить правильного ли типа элемент в полученной переменной, то можно использовать if(element.tagName === 'a').

3) Очень много повторяются у тебя Id. Id элементов на странице должны быть уникальны. Т. е. один id должен встречаться один раз. Поведение функции getElementById не определено для нескольких элементов с одинаковым id.

4) document.write('None');
При вызове этой функции вся текущая страница удалится. Читай документацию :)
Если хочешь, что-то добавить, то создавай динамически новый элемент через document.createElement() и пришапандоривай его в документ через appendChild. Либо заранее создай в самой HTML-ке место для вывода, а потом скриптом меняй текст этого объекта.

5) var onePunct.innerHTML = "Вид: + plants[0]";
Через innerHTML как-то не очень красиво писать, да еще и ошибиться можно, лучше используй метод описанный выше.
Правая часть присвоения у тебя обработается так: строка идентификатор строка. Естественно тут будет ошибка. Чтобы этого избегать, используй одинарные кавычки для обозначения строк в JS.
Кроме того, plants[0] внутри строки это просто текст 'plants[0]'. Если ты хочешь в середину текста засунуть значение переменной, то нужно писать так: 'какой-то текст' + plants[0] + 'какой-то текст' . В этом случае plants[0] преобразуется в строку и все отлично сработает.

6) var allImg onclick = "my_Func()";
Наверно, самая страшная строчка в этом скрипте :)
Во-первых, идут 2 идентификатора подряд allImg и onclick без каких-либо знаков. Тут сразу все поломается.

Предполагаю, что ты хотел написать:

var allImg.onclick = 'MyFunc();';

Все равно остается много проблем:
- var означает, что ты создаешь новую переменную. Если ты задаешь ей имя существующей переменной, то старая теряется.
- В оnclick нужно записывать функцию, а ты записываешь строку 'MyFunc();'.
- Нужно различать функцию и вызов функции. MyFunc это переменая, в которой лежит функция, а MyFunc() это вызов функции, который вернет undefined (т. к. функция ничего не возвращает через return).

Итак, имеем результат выполнения этой строчки: создаем новую (!) переменную allImg, создаем у нее свойство onclick и записываем туда строку 'MyFunc();'. Вряд ли это то, что ты хотел сделать :)

Если ты хотел всем элементам повесить одинаковый onclick, то это нужно делать для каждого элемента отдельно (в цикле).
for (var i = 0;i<allImg.length;i++)
allImg[i].onclick = myFunc // записываем именно функцию в onclick, а не ее вызов.
Илья Тарасенко
Илья Тарасенко
4 429
Лучший ответ
отсутствие базовых знаний
лично меня беспокоит предпоследняя строчка
Павел Чертов Это уж наверное что-то тут не то, раз не работает...
java script учи )
Да нет, путь норм.
Только написано через 5ую точку. Я, например, не могу понять за чем строка: "document.getElementById(n)". Как я помню так ничего не получится. А вот в следующих строках пишешь по-другому.
И еще ты в строке написал про массив, ведь так и выдаст)
Если хочешь могу кратенький стрипт написать.
Павел Чертов Спасибо. Мне тут своим умом нужно дойти до решения, поскольку цель чисто учебная
gfgftftftftftf
Виктор Ким
Виктор Ким
18