Нажав на jQuery

Когда я определяю код для щелчка и повторного изменения этого элемента, я хочу, чтобы элемент вернулся в первое состояние еще одним щелчком мыши.

Я написал еще один клик, но это не сработало Переключатель тоже не работал должным образом Я хочу, чтобы CSS появлялся при нажатии и удалялся при повторном нажатии.

$("#green").click(function() {
  var audio = new Audio('sounds/green.mp3');
  audio.play();
  $("#green").css("background-color", "gray");
  $("#green").css("border", "20px solid white");
});

$("#green").click(function() {
  var audio = new Audio('sounds/green.mp3');
  audio.play();
  $("#green").css("background-color", "green");
  $("#green").css("border", "0px");
});

«Переключатель тоже не работал должным образом» Опубликуйте и эту попытку. Нам всегда нужен минимальный воспроизводимый пример

j08691 24.06.2024 18:05
Поведение ключевого слова "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) для оценки ваших знаний,...
1
1
74
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Я написал еще один клик, но это не сработало

Могу поспорить, что оба обработчика кликов работали нормально, они просто сводят на нет общий результат, потому что оба запускаются при каждом клике.

Вам нужен только один обработчик кликов, ему просто нужно условно выполнить одну операцию вместо другой. Один из способов поддерживать это условие — сохранить в некотором глобальном состоянии информацию о том, какая операция была выполнена последней. Например:

var isClicked = false;
$("#green").click(function() {

  var audio = new Audio('sounds/green.mp3');
  audio.play();

  if (isClicked) {
    $("#green").css("background-color", "green");
    $("#green").css("border", "0px");
  } else {
    $("#green").css("background-color", "gray");
    $("#green").css("border", "20px solid white");
  }

  isClicked = !isClicked;
});

Каждый щелчок выполняет три действия:

  1. Воспроизвести аудио
  2. Условно изменить CSS так или иначе
  3. Переключите isClicked, чтобы при следующем нажатии было выбрано другое условие.

Однако мы могли бы пойти еще дальше. Поскольку вы переключаете стили CSS, используйте CSS (вместо JavaScript) для определения этих стилей. Например, предположим, что у вас есть следующие стили:

#green {
  background-color: green;
  border: 0px;
}

#green.active {
  background-color: gray;
  border: 20px solid white;
}

Тогда все, что вам нужно будет переключить, — это класс active элемента. И что достаточно удобно, в jQuery есть метод, позволяющий сделать это без необходимости отслеживать состояние переменной. Итак, ваш код JavaScript просто:

$("#green").click(function() {
  var audio = new Audio('sounds/green.mp3');
  audio.play();
  $("#green").toggleClass("active");
});

Почему бы просто не настроить класс по умолчанию и «активный» класс, а затем просто использовать метод .toggle() для переключения между ними. Необходимость писать условный оператор и применять встроенные стили — очень устаревший подход.

Scott Marcus 24.06.2024 23:35

Просто настройте два разных стиля как классы и одно событие щелчка, которое будет переключаться между ними. Вам просто нужно быть осторожным, чтобы вторичный стиль был написан с более конкретным селектором, чем селектор по умолчанию, чтобы он переопределялся при применении.

$("#green").click(function() {
   //Toggle will work if the classes are set up correctly.
   this.classList.toggle("clicked");
});
/* Set up a default style  */
#green {
  background-color:gray;
  border:20px solid blue;
}

/* Define secondary style to be toggled on/off */
/* This selector needs to be more specific than the default (ID) selector,
   so it will be a Class.ID selector.  */
#green.clicked {
  background-color:green;
  border: 0;
}
<script src = "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
<div id = "green">This is the content area</div>

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