Javascript: как динамически изменять src изображения с событием в классе кнопок?

У меня проблемы с написанием функции, которая динамически меняет изображение. У меня есть три кнопки: маленькая, средняя и большая.

Когда я нажимаю кнопку, я хочу, чтобы изображение изменилось до желаемого размера. HTML кнопок нельзя изменить, поэтому я хочу написать функцию JS, которая сделает это возможным.

Ниже вы видите мой сценарий:

<img src = "" style = "width:100%; height:400px;" name = "formula" id = "formula">

<script type='text/javascript'>
$(document).ready(function(){
    changeClass();

    document.getElementsByClassName("button-variable-item")[0].addEventListener( 'click', changeClass);
    document.getElementsByClassName("button-variable-item")[1].addEventListener( 'click', changeClass);
    document.getElementsByClassName("button-variable-item")[2].addEventListener( 'click', changeClass);

});

function changeClass(){
    console.info('binnen');

    var image_name;
    var L = document.getElementsByClassName("button-variable-item-l");
    var S = document.getElementsByClassName("button-variable-item-s");
    var M = document.getElementsByClassName("button-variable-item-m");

    if ( S[0].classList.contains('selected') ){
        image_name = "https://www.studio-31.nl/wp-content/uploads/2018/03/WhatsApp-Image-2018-03-16-at-11.52.31.jpeg";
        console.info('S');
    }else if ( L[0].classList.contains('selected') ){
        image_name = "https://www.studio-31.nl/wp-content/uploads/2018/03/WhatsApp-Image-2018-03-16-at-11.52.19.jpeg";
        console.info('L');
    }else if ( M[0].classList.contains('selected') ){
        image_name = "https://www.studio-31.nl/wp-content/uploads/2018/03/WhatsApp-Image-2018-03-16-at-11.46.25.jpeg";
        console.info('M');
    }

     $('#formula').attr('src', image_name);
}

</script>

А вот HTML-код кнопок:

<ul class = "list-inline variable-items-wrapper button-variable-wrapper " data-attribute_name = "attribute_pa_size">
<li data-wvstooltip = "L" class = "variable-item button-variable-item button-variable-item-l selected" title = "L" data-value = "l">
    <span>L</span>
</li>
<li data-wvstooltip = "M" class = "variable-item button-variable-item button-variable-item-m" title = "M" data-value = "m">
    <span>M</span>
</li>
<li data-wvstooltip = "S" class = "variable-item button-variable-item button-variable-item-s" title = "S" data-value = "s">
<span>S</span>
</li>
</ul>

Когда я нажимаю на кнопку, происходит что-то, но не ожидаемое действие.

Пожалуйста, помогите мне!

А что это-то? Было бы полезно сообщить нам, с какой проблемой вы столкнулись. Получит ли image_name ожидаемое значение?

Mitya 06.06.2018 13:45

u может создать элемент img с тем же src для img, и в этом случае применить к var (img) .style.width = 0%; .,50%; ... 100%

Luis Luis Maia Maia 06.06.2018 13:46
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
2
142
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

<li data-wvstooltip = "L" data-src = "image-url-l">
    <span>L</span>
</li>
<li data-wvstooltip = "M" data-src = "image-url-m">
    <span>L</span>
</li>
<li data-wvstooltip = "S" data-src = "image-url-s">
    <span>L</span>
</li>
<script type = "text/javascript">
$(document).on("click", "li", function(){
	$("#formula").attr("src", $(this).attr("data-src"));
});
</script>

Добавьте аргумент event в функцию changeClass. Это позволит вам обнаружить кнопку, с которой было отправлено событие.

function changeClass(event) {

    switch (event.target.getAttribute('data-value')) {

       case 'l': ....
Ответ принят как подходящий

Я исправил ваш код, установив класс selected на выбранный элемент, прежде чем вы сделаете свое дело.

function changeClass()
{
    console.info('binnen');

    //check if function is called from button binding
    if ($(this).is('.button-variable-item')) {
        //remove selected class from every button
        $('.button-variable-item').removeClass('selected');
        //add selected class to the clicked button
        $(this).addClass('selected');
    }

    [...]

Другие вопросы по теме