#javascript
#javascript
Вопрос:
Мне нужно будет выполнить 2 разных действия по одной ссылке, которая будет иметь активное / неактивное состояние, прямо сейчас я знаю только, как сделать одно за раз, что-то вроде этого (active):
<a href="#" onclick="ShowOneState('state_One', gameInstance);" style="active">State One</a>
И я хотел бы иметь другое состояние по тому же щелчку (неактивное), есть ли способ динамически изменять это? Метка не должна меняться, за исключением цвета, например, стиля.
С другой стороны, было бы здорово, если бы я мог также показать список активных элементов, что-то вроде:
Активные состояния: состояние один, состояние два, состояние …
Комментарии:
1. Изменение CSS-класса ссылки сделало бы это.
2. Вы можете выполнить только одно действие по ссылке, но, конечно, это действие может оценивать состояние ссылки и выполнять разные действия в соответствии с ним.
3. Привет, @John3136, не могли бы вы уточнить, пожалуйста? Я не совсем понимаю, что вы имеете в виду, и Google тоже не помогает, или, по крайней мере, не для меня.
Ответ №1:
Я рекомендую что-то другое, чем тег A, для того, что вы делаете. Я также рекомендую современный эквивалент onclick, прослушивателя событий. Я также рекомендую назначать и переключать класс.
<a href="#" id="myElem" class="class123" style="active">State One</a>
Я удалил ваш onclick и поместил его в прослушиватель событий. Я добавил класс, так что вы можете переключать его.
function classToggle() {
this.classList.toggle('class123');
this.classList.toggle('class456');
}
Это переключает ваш класс, тем самым позволяя вам изменять поведение ссылки на основе класса. Активный / неактивный или Class123 / Class456 все, что вы хотите использовать, будет работать.
document.querySelector('#myDiv').addEventListener('click', classToggle);
Это ваш слушатель. Он применяет функцию Classstoggle при нажатии. Вы можете сделать это с помощью div / кнопки / чего угодно. Лично я бы изменил тег A на Div.
<div id="myElem" class="class123">click here</div>
И вот пример того, как этот материал работает и меняется в зависимости от переключения и классов.
function classToggle() {
this.classList.toggle('class123');
this.classList.toggle('class456');
}
document.querySelector('#myElem').addEventListener('click', classToggle);
document.querySelector('#myElem').addEventListener('click', mogrify);
function mogrify(){
if (document.querySelector('#myElem').classList.contains('class123')) {
document.querySelector('#myElem').style.backgroundcolor = "#54C0FF"
document.querySelector('#myElem').innerText = "State Two";
} else {
document.querySelector('#myElem').style.backgroundcolor = "#FF8080"
document.querySelector('#myElem').innerText = "State One";
}
}
.class123 {
color: #f00;
}
.class456 {
color: #00f;
}
<a href="#" id="myElem" class="class456" style="active">State One</a>
Ответ №2:
Я думаю, что у меня получилось, вот мой код, пожалуйста, дайте мне знать, если он достаточно хорош.
A href:
<a href="#" onclick="toggleState(this)">State One</a>
js:
<script>
function toggleState(a) {
if ( a.className === 'visible' ) {
HideOneState('state_One', gameInstance);
a.className = '';
} else {
ShowOneState('state_One', gameInstance);
a.className = 'visible';
}
}
</script>
Ответ №3:
у @shandoe2020 есть хороший ответ, но вот «старый способ», который тоже довольно легко понять. Его можно довольно легко адаптировать к ссылкам (или чему-либо еще).
<!DOCTYPE html>
<html>
<head>
<style>
.my-button { width:150px; height:150px; }
.my-red { background-color:#ff0000; }
.my-blue { background-color:#0000ff; }
</style>
<script>
/* toggle the state of my-red and my-blue class */
function toggle()
{
/* yeah yeah, hardcoding the item to change is bad */
var elem = document.getElementById("btn")
elem.classList.toggle("my-red")
elem.classList.toggle("my-blue")
}
</script>
</head>
<body>
<div>
<p><button id="btn" class="my-button my-red" onclick="toggle()">Button</button></p>
</div>
</body>
</html>