Форум программистов, компьютерный форум, киберфорум
JavaScript для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/18: Рейтинг темы: голосов - 18, средняя оценка - 4.72
10 / 10 / 1
Регистрация: 20.08.2016
Сообщений: 243

Как сделать чтобы при клике на кнопку менялось изображение

23.10.2021, 21:44. Показов 3706. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Для первой картинки меняется изображение, для остальных нет, querySelectorAll так же.

HTML5
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
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <link rel="stylesheet" href="style.css">
</head>
<body>
   
    <form action="" class ='todo'>
        <div class="inputarea">
            <img src="arrow.png" alt="" class="arrow">
            <input class = 'tasks' value="Что нужно сделать">
        </div>
        <div class="item">
            <img src="unactivetask.gif" alt="" class="itemicon firstitem">
            <div class = 'description'>item</div>
            <img src="close.png" alt="" class = "closeimg">
        </div>
        <div class="item">
            <img src="unactivetask.gif" alt="" class="itemicon seconditem">
            <div class = 'description'>item</div>
            <img src="close.png" alt="" class = "closeimg">
        </div>
        <div class="item">
            <img src="unactivetask.gif" alt="" class="itemicon thirditem">
            <div class = 'description'>item</div>
            <img src="close.png" alt="" class = "closeimg">
        </div>
        <div class="footer">
            <div class="itemsleft">
                items left
            </div>
            <div class="itemscondition">
                <div class="allitems">
                    All
                </div>
                <div class="activeitem">
                    Active
                </div>
                <div class="completeditem">
                    Completed
                </div>
            </div>
            <div class="clearcompleted">
                Clear completed
            </div>
        </div>
    </form>
    
    <script src="script.js"></script>
</body>
</html>
CSS
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
.todo {
    background-color: aquamarine;
    width: 500px;
    margin: 0 auto;
    border: 1.5px solid gold;
    box-shadow: 0 0 5px rgba(0,0,0,0.5);
}
 
.inputarea {
    display: flex;
    border-bottom: 2px solid gray;
}
 
.arrow {
    height: 20px;
    width: 20px;
    padding-top: 5px;
    padding-left: 10px;
    padding-right: 10px;
}
 
.tasks {
    border: none;
    background-color: aquamarine;
    outline: none;
}
 
.itemicon {
    height: 20px;
    width: 20px;
    padding-left: 10px;
    padding-right: 10px;
}
 
 
.item {
    padding-top: 10px;
    padding-bottom: 10px;
    display: flex;
    border-bottom: 2px solid gray;
    position: relative;
}
 
.tasks {
    padding-top: 10px;
    padding-bottom: 10px;
}
 
.description {
    
}
 
.closeimg {
    height: 20px;
    width: 20px;
    position: absolute;
    right: 10px;
}
 
.footer, .itemscondition {
    display: flex;
    justify-content: space-between;
}
 
 
.allitems {
    padding-right: 10px;
}
 
.activeitem {
    padding-right: 10px;
}
 
.itemscondition, .itemsleft, .clearcompleted {
    padding-top: 10px;
    padding-bottom: 10px;
}
 
.itemsleft {
    padding-left: 10px;
}
 
.clearcompleted {
    padding-right: 10px;
}
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
'use strict';
 
let itemicon = document.querySelector('.itemicon');
let itemActive = document.querySelector('.itemActive');
 
 
itemicon.onclick = function() {
    if (!itemicon.classList.contains('itemActive')) {
        itemicon.src = 'activetask.jpg';
        itemicon.classList.add('itemActive');
    } else {
        itemicon.src = 'unactivetask.gif';
        itemicon.classList.remove('itemActive');
    }   
};

https://jsfiddle.net/L68gxt7/h581t306/2/
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.10.2021, 21:44
Ответы с готовыми решениями:

как сделать чтобы при клике на кнопку менялось содержимое дива ?
как сделать чтобы при нажатии кнопку с id=&quot;rotate_table&quot; изменилась таблица календаря и дни располагались в ряд &lt;tr&gt;&lt;td...

Как сделать так, чтобы при нажатии кнопки менялось изображение?
Как сделать так ,чтобы при нажатии кнопки менялось изображение и чтобы была возможность добавить несколько таких кнопок. И , если не...

Как сделать так чтобы при наведении мышки на ссылку div менялось изображение при использовании z-index
Здравствуйте, уважаемые участники форума! Подскажите мне, пожалуйста, как сделать так чтобы кнопка &quot;Заказать обратный звонок&quot;...

4
 Аватар для klyapa
3503 / 1267 / 429
Регистрация: 24.07.2016
Сообщений: 1,890
23.10.2021, 22:16
Цитата Сообщение от sozdatel Посмотреть сообщение
Для первой картинки меняется изображение, для остальных нет
У вас в переменной let itemicon = document.querySelector('.itemicon'); один единственный элемент, по которому вы кликаете и у него меняется изображение. А вы что хотите? Чтобы кликая по одному элементу у всех поменялось? И какой у вас целевой элемент клика, в смысле, что вы считаете "кнопкой"?
Напишите, по чему нужно щёлкнуть, и что вы хотите получить в итоге ...
0
10 / 10 / 1
Регистрация: 20.08.2016
Сообщений: 243
23.10.2021, 23:27  [ТС]
klyapa, целевой элемент клика - изображение img. У меня 3 блока item, в каждом из которых картинка img. Я хочу, чтобы кликая на кнопку (картинку) в соответствующем блоке, менялось изображение в этом блоке, пока только в первом блоке меняется. Но я не хочу этот код
JavaScript
1
2
3
4
5
6
7
8
9
{
    if (!itemicon.classList.contains('itemActive')) {
        itemicon.src = 'activetask.jpg';
        itemicon.classList.add('itemActive');
    } else {
        itemicon.src = 'unactivetask.gif';
        itemicon.classList.remove('itemActive');
    }   
};
выносить в отдельную функцию, и вешать её по клику на firstitem, seconditem, thirditem, хотя можно было бы и, наверное, заработало, но по-моему, это неправильный подход.
0
 Аватар для klyapa
3503 / 1267 / 429
Регистрация: 24.07.2016
Сообщений: 1,890
24.10.2021, 00:27
Лучший ответ Сообщение было отмечено sozdatel как решение

Решение

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// если "навсегда" картинку поменять
document.querySelector('form.todo').addEventListener('click', (e) => {  
    if( !e.target.closest('img.itemicon') ) return; 
    let elem = e.target.closest('img.itemicon');
    if( elem.classList.contains('itemActive') ) return;
    elem.classList.add('itemActive');
    elem.src = 'activetask.jpg';
});
 
// "переключатель" по клику
document.querySelector('form.todo').addEventListener('click', (e) => {
    if( !e.target.closest('img.itemicon') ) return;
    let elem = e.target.closest('img.itemicon');
    if( elem.classList.contains('itemActive') ) elem.src = 'unactivetask.gif';
    else elem.src = 'activetask.jpg';
    elem.classList.toggle('itemActive');
});
1
10 / 10 / 1
Регистрация: 20.08.2016
Сообщений: 243
26.10.2021, 00:09  [ТС]
Я пытаюсь сделать дальше, теперь при вводе в input сверху и нажатии enter хочу, чтобы добавлялся новый div с соответствующим текстом, ничего не выходит, в чём ошибка?

Добавлено через 2 часа 40 минут
Немного изменил код, всё равно не работает
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
document.querySelector('form.todo').addEventListener('click', (e) => {
    if( !e.target.closest('img.itemicon') ) return;
    let elem = e.target.closest('img.itemicon');
    if( elem.classList.contains('itemActive') ) elem.src = 'unactivetask.gif';
    else elem.src = 'activetask.jpg';
    elem.classList.toggle('itemActive');
});
 
document.querySelector('form.todo').addEventListener('click', (e) => {
    if( !e.target.closest('img.closeimg') ) return;
    let item = e.target.closest('div.item')
    item.remove();
});
 
 
document.querySelector('form.todo').addEventListener('keyup', (e) => {
    if( !e.target.closest('input.tasks' && event.keyCode !== 13) ) return;
    let task = e.target.closest('input.tasks');
    let newtask = document.createElement('div');
    newtask.className = 'item';
    task.oninput = function () { 
            newtask.innerText = this.value;  
        }
    document.querySelector('div.item').prepend(newtask);
});
Код выше вместо первоначального js, остальное то же самое.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.10.2021, 00:09
Помогаю со студенческими работами здесь

Как сделать, чтобы по нажатию кнопки менялось изображение?
...

Как сделать чтобы при клике на кнопку 'один' на форме у меня прибавлялась единица?
Делаю элементарный калькулятор но столкнулся с наиглупейшей проблемой в textbox ввожу цифры они сохраняются при нажатии на какое либо число...

Как сделать в Delphi такую кнопку чтобы при наведении на неё курсором она меняло своё изображение
Здраствуйте дорогие формучане.Я здесь новенький и у меня возник вопрос: Как сделать в Delphi такую кнопку чтобы при наведении на неё...

Как сделать чтобы при создании массива его имя менялось?
Вот есть такая функция: void UniqueCollection (int x1, int y1, int x2, int y2) { int Values = 4; int *Collection; Collection =...

Как сделать чтобы при изменении размера окна разрешение не менялось (DirectX 11)?
Здравствуйте. Я изучаю DirectX 11 и хотел бы узнать как мне в моей программе сделать так, чтобы при растягивании окна разрешение не...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru