С Новым годом! Форум программистов, компьютерный форум, киберфорум
JavaScript
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.87/23: Рейтинг темы: голосов - 23, средняя оценка - 4.87
25 / 18 / 2
Регистрация: 12.12.2011
Сообщений: 76

Изменение контента по клику

12.12.2011, 13:36. Показов 4872. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем доброго времени суток!

Имеется выпадающий список. Необходимо реализовать следующее действие.
При клике на любой элемент списка выводится информация. В моем случае - таблица.
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
    <!DOCTYPE html>
    <html>
    <head>
    <title></title>
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
    <script>
    function Add() {
        var o=document.getElementById('list')
        var options=new Array("Город1","Город2","Город3","Город4")
    var i,opt
        for (i=0; i<options.length; i++) {
            opt=document.createElement('option')
            opt.innerHTML=options[i]
            o.appendChild(opt)
        }
    }
    </script>
    </head>
    <body onload='Add()'>
    <select id='list'>
    </select>
    </body> </html>
То есть если я выбираю значение "Город1", то ниже должна отобразиться таблица с данными по городу1.
В приведенном коде имеется только список. Таблицы не добавляла. Прошу советы, как это можно реализовать.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.12.2011, 13:36
Ответы с готовыми решениями:

Изменение стилей по клику
Нужно сделать изменение стиля по клику. У картинки есть (id=&quot;font_bold&quot;) По нажатию текст, в (id=&quot;note&quot;) должен стать...

Изменение класса по клику
Здравствуйте. У меня есть таблица, в которой пока что 5 строк (данные берутся из БД), но нужна кнопки &quot;show more&quot; - которая...

Изменение картинки по клику на кнопку
Запускаю страницу в Firefox - картинка не меняется Запускаю страницу в Google Chrome - картинка меняется и сразу удаляется код: ...

14
 Аватар для ayrat_net
84 / 84 / 12
Регистрация: 12.01.2011
Сообщений: 1,049
12.12.2011, 13:51
С удовольствием бы помог, но скорее всего тебе все равно пришлось бы переделывать.
Суть в следующем:
При загрузке страницы с сервера из хранилища должна загрузиться вся информация как города так и информация о них. Это не плохая затея если у тя несколько городов. А если у тебя много городов то эта затея очень затратна в плане производительности. Так что перед тем как ты сейчас будешь разбирать этот код мне кажется тебе следует подумать об AJAX. а потом и спросишь ответ на свой вопрос.
0
25 / 18 / 2
Регистрация: 12.12.2011
Сообщений: 76
12.12.2011, 13:53  [ТС]
Мне нужно делать это на JS. И это не на серверах хранится. Городов будет порядка 20 штук. Думаю не накладно для JS. Если не сложно помогите.
0
Просто любитель
 Аватар для GuardCat
626 / 464 / 120
Регистрация: 20.01.2011
Сообщений: 865
Записей в блоге: 2
13.12.2011, 10:59
Вот простой вариант реализации задачи. Добавляю не таблицу, а элемент p. Кроме того, в вашем коде я изменил следующее:
1. Добавляю value каждому элементу option.
2. Убрал атрибут onload из тега body и перенёс его в зону скриптов.
3. Косметические доделки.
Если делать всерьёз, нужно делать без глобального массива. Как пример вполне жизнеспособно.
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
<!DOCTYPE html>
<html>
    <head>
        <title></title>
        <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
        <script>
            window.onload = function () {
                add();
                document.getElementById('list').onchange = function () {
                    showInfo(+this.value);
                }
                document.getElementById('list').onchange();
            }
            var cityInformation = [
                "Город 1 — прекрасное поселение на берегу реки Грязнушки, на живописном, утыканном кривыми сосёнками топком иле, нанесённом этой великой микрорекой.",
                "Город 2 — деревушка где-то на окраине Европы.",
                "Город 3 — отличный город с прекрасным памятником его основателю (имя, к сожалению. утрачено).",
                "Город 4 — город, которых мало. И больше их не надо."
            ]
            function add() {
                var o = document.getElementById('list')
                var options = new Array("Город1", "Город2", "Город3", "Город4")
                var i, opt;
                for (i = 0; i < options.length; i++) {
                    opt = document.createElement('option');
                    opt.innerHTML = options[i];
                    opt.value = i;
                    o.appendChild(opt)
                }
            }
            function showInfo (value) {
                var p = document.createElement("p");
                var informer = document.querySelector("#cityInfo");
                if (!informer) {
                    p.id = "cityInfo";
                    p.class = "cityInformer";
                    document.body.appendChild(p);
                }
                informer = document.querySelector("#cityInfo");
                informer.innerHTML = cityInformation[value];
            }
        </script>
    </head>
    <body>
        <select id='list'>
        </select>
    </body>
</html>
Пожалуйста, обратите внимание на отступы и точки с запятыми. Это необязательная часть работы с кодом и разметкой, но важная с точки зрения правил хорошего тона.
1
25 / 18 / 2
Регистрация: 12.12.2011
Сообщений: 76
13.12.2011, 12:01  [ТС]
GuardCat, Огромное спасибо за Вашу помощь! Именно то, что мне нужно было!
Так же благодарю за замечания по поводу оформления!
0
25 / 18 / 2
Регистрация: 12.12.2011
Сообщений: 76
14.12.2011, 13:25  [ТС]
кстати под IE не работает((( Есть вариант как изменить? Нужно только под IE...
0
Просто любитель
 Аватар для GuardCat
626 / 464 / 120
Регистрация: 20.01.2011
Сообщений: 865
Записей в блоге: 2
14.12.2011, 13:37
Блин косяк. Вроде проверял же. Замените
JavaScript
1
p.class = "cityInformer";
на
JavaScript
1
p.className = "cityInformer";
0
25 / 18 / 2
Регистрация: 12.12.2011
Сообщений: 76
14.12.2011, 14:21  [ТС]
Изменила, как самостоятельный скрипт - работает, а в моем странице не хочет. Возможно из-за структуры... ТО есть позволяет выбрать город, но не выводит информацию...

Добавлено через 30 минут
GuardCat, Выводит такую вот ошибку
Сведения об ошибке на веб-странице

Агент пользователя: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; MRA 5.9 (build 4876); MRA 5.7 (build 03797); SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; .NET4.0C)
штамп времени: Wed, 14 Dec 2011 10:17:22 UTC



Сообщение: Объект не поддерживает это свойство или метод
Строка: 34
Символ: 33
Код: 0
URI-код: file:///C:/ItsKaz/StartCab/StartCab/Start.htm

Вот 34 строка, 33 символ "v"
var informer = document.querySelector("#cityInfo");

в чем может быть дело?
0
Просто любитель
 Аватар для GuardCat
626 / 464 / 120
Регистрация: 20.01.2011
Сообщений: 865
Записей в блоге: 2
14.12.2011, 15:56
Странно как-то, вроде есть селекторы в IE. Ну Ok, вот код без селекторов, плюс немного оптимизации. Проверено в Chrome 16 и IE8
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
window.onload = function () {
        add();
        document.getElementById('list').onchange = function () {
                showInfo(+this.value);
        }
        document.getElementById('list').onchange();
}
var cityInformation = [
        "Город 1 — прекрасное поселение на берегу реки Грязнушки, на живописном, утыканном кривыми сосёнками топком иле, нанесённом этой великой микрорекой.",
        "Город 2 — деревушка где-то на окраине Европы.",
        "Город 3 — отличный город с прекрасным памятником его основателю (имя, к сожалению. утрачено).",
        "Город 4 — город, которых мало. И больше их не надо."
]
function add() {
        var o = document.getElementById('list')
        var options = new Array("Город1", "Город2", "Город3", "Город4")
        var i, opt;
        for (i = 0; i < options.length; i++) {
                opt = document.createElement('option');
                opt.innerHTML = options[i];
                opt.value = i;
                o.appendChild(opt)
        }
}
function showInfo (value) {
        var p = document.createElement("p");
        var informer = document.getElementById("cityInfo");
        if (!informer) {
                p.id = "cityInfo";
                p.className = "cityInformer";
                document.body.appendChild(p);
                informer = p;
        }
        informer.innerHTML = cityInformation[value];
}
1
25 / 18 / 2
Регистрация: 12.12.2011
Сообщений: 76
15.12.2011, 07:34  [ТС]
GuardCat , спасибо! Теперь выводит инфу.. Только не там где нужно... Сам список у меня в <DIV> сидит, а элемент выводится в верху страницы. Как сделать чтобы элемент в том же <DIV> отображался?
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
<div id=Grp_Learn class=Grp>
<p class=GrpHead><img align=absmiddle src=cpicok.gif>  <b>Список сертифицированных центров обучения</b></p>
<table cellSpacing="0" width="75%" border="0" style="font-size: 10pt;">
<tr>
<td>
<select id='list'>
</select>
</td>
</tr>
</table>
        
</div>
Вот тут кусок кода, где описывается ДИВ со списком. Помогите еще раз, пожалуйста! Горят сроки!
0
Просто любитель
 Аватар для GuardCat
626 / 464 / 120
Регистрация: 20.01.2011
Сообщений: 865
Записей в блоге: 2
15.12.2011, 09:54
Вот эту строку в самом начале, сразу после тега script, не вкладывая ни в какие функции:
JavaScript
1
var recipientBlock;
Делать переменную глобальной не комильфо, но раз важно время...
И вот в двух местах корректировка:
JavaScript
1
2
3
4
5
6
7
8
window.onload = function () {
    add();
    document.getElementById('list').onchange = function () {
        showInfo(+this.value);
    }
    document.getElementById('list').onchange();
    recipientBlock = document.getElementById('Grp_Learn'); // добавили это   
}
JavaScript
1
2
3
4
5
6
7
8
9
10
11
function showInfo (value) {
    var p = document.createElement("p");
    var informer = document.getElementById("cityInfo");
    if (!informer) {
        p.id = "cityInfo";
        p.className = "cityInformer";
        recipientBlock.appendChild(p);// изменили тут
        informer = p;
    }
    informer.innerHTML = cityInformation[value];
}
И это... Все параметры тегов возмите в кавычки. Во всём HTML. Т.е. не «<div id=Grp_Learn class=Grp>», а «<div id="Grp_Learn" class="Grp">».

Отпишитесь по результатам!
0
25 / 18 / 2
Регистрация: 12.12.2011
Сообщений: 76
15.12.2011, 10:21  [ТС]
GuardCat, все сделал как вы указали.
Появилась новая ошибка.

Сведения об ошибке на веб-странице

Сообщение: 'recipientBlock' - есть null или не является объектом
Строка: 40
Символ: 33
Код: 0
URI-код: file:///C:/ItsKaz/StartCab/StartCab/Start.htm


В этой строке:
Java
1
recipientBlock.appendChild(p);
Добавлено через 8 минут
Как следствие данные не выводятся вообще нигде...
0
Просто любитель
 Аватар для GuardCat
626 / 464 / 120
Регистрация: 20.01.2011
Сообщений: 865
Записей в блоге: 2
15.12.2011, 10:36
1. В window.onload точно есть строка «recipientBlock = document.getElementById('Grp_Learn');» и строка «var recipientBlock;» точно в самом начале и не относится ни к каким функциям ?
2. div, куда должны выводиться данные, статический (руками в коде прописан), а не динамический?
3. id вашего div точно уникально в пределах страницы (никакой другой элемент на странице не имеет такого id)?
4. Если на первые три вопроса — «да», тогда я не знаю уже, что за капризы у вашего интерпретатора и давайте попробуем так: откатите все изменения, которые сделали сегодня. Внесите одно изменение в одну функцию:
JavaScript
1
2
3
4
5
6
7
8
9
10
11
function showInfo (value) {
        var p = document.createElement("p");
        var informer = document.getElementById("cityInfo");
        if (!informer) {
                p.id = "cityInfo";
                p.className = "cityInformer";
                document.getElementById('Grp_Learn').appendChild(p);// изменили тут
                informer = p;
        }
        informer.innerHTML = cityInformation[value];
}
1
25 / 18 / 2
Регистрация: 12.12.2011
Сообщений: 76
15.12.2011, 10:51  [ТС]
GuardCat, Все заработало!!! Наконец-то! Огромное спасибо!
0
25 / 18 / 2
Регистрация: 12.12.2011
Сообщений: 76
21.12.2011, 15:12  [ТС]
GuardCat, можно еще вопрос?
Как изменить скрипт, чтобы в другой части документа (<div id="Grp_Partner">), был список с другими городами и привязкой к другому массиву данных?
я с JS не очень дружу, поэтому не получается.
Вот что я натворила:
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
 <script>
           
              window.onload = function () {
                add();
                document.getElementById('list').onchange = function () {
                                showInfo(+this.value);
                }
                  document.getElementById('list2').onchange = function () {
                                showInfo(+this.value);
                }
                document.getElementById('list').onchange();
                document.getElementById('list2').onchange();
                
}
var cityInformation =["1", "2","3"]
var PartnerInformation = ["11","22","33"]
function add() {
                var o = document.getElementById('list')
                var o2 = document.getElementById('list2')
                var options = new Array("gor1","go2","")
                var options2 = new Array("p1","p2","p3")
                var i, opt,j,opt2;
                for (i = 0; i < options.length; i++) {
                                opt = document.createElement('option');
                                opt.innerHTML = options[i];
                                opt.value = i;
                                o.appendChild(opt)
                }
                 for (j = 0; j < options2.length; j++) {
                                opt2 = document.createElement('option2');
                                opt2.innerHTML = options2[j];
                                opt2.value = j;
                                o2.appendChild(opt2)
                }
}
function showInfo (value) {
        var p = document.createElement("p");
        var p2 = document.createElement("p2");
        var informer = document.getElementById("cityInfo");
        var informer2 = document.getElementById("PartnerInfo");
        if (!informer) {
                p.id = "cityInfo";
                p.className = "cityInformer";
                document.getElementById('Grp_Learn').appendChild(p);// изменили тут
                informer = p;
        }
         if (!informer2) {
                p2.id = "PartnerInfo";
                p2.className = "PartnerInformer";
                document.getElementById('Grp_Partner').appendChild(p2);// изменили тут
                informer2 = p2;
        }
        informer.innerHTML = cityInformation[value];
        informer2.innerHTML = PartnerInformation[value];
}
                </script>
Можно ли так делать или как по-другому?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.12.2011, 15:12
Помогаю со студенческими работами здесь

Изменение содержимого ячейки по клику
Доброго времени суток. Подскажите пожалуйста, как без jquery можно изменить содержимое ячейки. К примеру, есть таблица на две...

Изменение стилей таблицы по клику
Здравствуйте, помогите со следующим вопросом: требуется, что бы по клику на клавишу &quot;Просмотр&quot; изменялись параметры ячейки на...

Изменение стиля по клику на элемент
Добрый день! Пытаюсь по клику изменить стиль элемента, теоретически делаю как мне кажется все правильно &lt;label...

Изменение контента при скроле
Приветствую. Появился вопрос.Как сделать,что бы при скроле страницы менялся контент на сайте(К примеру h2 заголовок) при этом он...

Изменение цвета фона по клику на чекбокс
Помогите, пожалуйста, решить проблему. Нужно, чтобы при отмеченном чекбоксе цвет фона родительского блока изменялся с белого на желтый....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru