Я действительно новичок в Javascript, и мне удалось заставить этот код работать для моего проекта. https://codepen.io/kevinpowell/pen/EMdjOV
Мне просто нужно, чтобы он работал на другую кнопку. Так что в основном другая кнопка, но способная работать, вызывая тот же js.
Как видите, текущая главная кнопка
<button id = "dark-mode-toggle" class = "dark-mode-toggle">
Я считаю, что копирование одного и того же тега кнопки html и просто вставка в другое место не работает. Вызов будет работать только для первой кнопки.
Могу ли я каким-то образом создать еще одну кнопку с другим классом, например .dark-mode-toggle-two
, и использовать ее в js?
Если вы хотите, чтобы одна и та же функция вызывалась с двух разных кнопок, все, что вам нужно сделать, это определить функцию (вместо использования анонимной функции), а затем сослаться на нее с помощью обоих прослушивателей событий. Что-то вроде этого:
function myAction() {
// Do something
}
button1.addEventListener('click', myAction);
button2.addEventListener('click', myAction);
Вам нужно делегировать и не использовать идентификаторы
https://codepen.io/mplungjan/pen/abmmxBd
document.addEventListener("click", function(e) {
let tgt = e.target;
const possibleParent = tgt.closest("button");
tgt = possibleParent ? possibleParent : tgt; // clicking button or SVG
if (tgt.classList.contains("dark-mode-toggle")) { // class='dark-mode-toggle'
// get their darkMode setting
darkMode = localStorage.getItem('darkMode');
// if it not current enabled, enable it
if (darkMode !== 'enabled') {
enableDarkMode();
// if it has been enabled, turn it off
} else {
disableDarkMode();
}
}
})
Обратите внимание, что в codepen мне приходилось различать переключатели темного режима в разделе и в других местах, потому что у вас есть абсолютная позиция.
Это действительно работает! Хотя с вашим кодом нажатия кнопок не работают при нажатии непосредственно на svg.
Простите меня, если я вас неправильно понимаю, но я буквально нажимаю на вашу кодовую ручку, и мне приходится нажимать на границу кнопки. Щелчок прямо по центру svg ничего не делает. Я что-то пропустил?
Я обновил код.
Принял! Это мой первый пост, и я очень ценю помощь! @mplungjan
Пожалуйста. В следующий раз постарайтесь опубликовать минимально воспроизводимый пример здесь, в SO, что предотвратит его закрытие. Во многих случаях внешние сайты меняются или исчезают и больше не являются полезными для следующего человека, чтобы задать тот же тип вопроса.
В этом есть смысл. Я запомню это. @mplungjan
@mplungjan Как вы думаете, этот код имеет хорошую производительность? (Я имею в виду document.addEventListener...)
@HosseinShourabi, чем ближе к кнопкам, тем лучше. Таким образом, контейнер вокруг них является предпочтительным. Но запуск страницы с циклом для назначения обработчикам событий конкурирующих кнопок также не идеален. Если есть только две кнопки, то прослушиватель событий на уровне документа может быть излишним.
Привет, я думаю, вы можете добиться этого, используя прослушиватель событий. Пожалуйста, ознакомьтесь с приведенной ниже логикой:
JS-файл
function toogleMode(event) {
//your logic
}
На вашей html-кнопке вы можете иметь что-то вроде:
<button onclick = "toogleMode('$event')">CHange color</button>
Пожалуйста, не используйте встроенные обработчики событий
Пожалуйста, добавьте минимальный воспроизводимый пример к самому вопросу вместо внешней ссылки. Вы можете создать Фрагмент стека, если хотите, чтобы он работал.