#javascript #html #css
Вопрос:
Я новичок в JavaScript, и я пытался изменить цвет текстовой строки на своем веб-сайте, когда я нажимаю на нее с помощью JS, я знаю, что есть способы сделать это только с помощью CSS, но я хотел бы попрактиковаться в JS, это то, что я пытался до сих пор:
У меня есть этот список:
function white() {
const input = document.getElementById("weekly");
input.style.color = "white";
}
<ul>
<li><a id="weekly" href="/index.html" onclick="white()">Weekly</a></li>
</ul>
Это более длинный список, но я не хотел, чтобы это выглядело беспорядочно 🙂
Я хочу изменить цвет «Еженедельно», когда на него нажимают, и это то, что я пробовал: я уже некоторое время пытаюсь, и это лучшее, что я придумал, но, похоже, не работает.
Комментарии:
1. Насколько я вижу, это работает: jsfiddle.net/wso8qert (Я вообще не менял ваш код). Можете ли вы объяснить свое поведение?
2. Я вставил ваш код в фрагмент, и он отлично работает
Ответ №1:
Хотя только на долю секунды текст тега привязки действительно стилизован для отображения в виде белого текста. Ваш тег привязки переносит пользователя /index.html
, и, таким образом, эффект не виден до тех пор, пока пользователь находится на странице. Чтобы избежать перенаправления, установите href
для атрибута значение #
:
function white() {
const input = document.getElementById("weekly");
input.style.color = "white";
}
<ul>
<li><a id="weekly" href="#" onclick="white()">Weekly</a></li>
</ul>
Комментарии:
1. «установите атрибут href в
#
» — или просто удалите его полностью, чтобы предотвратить прокрутку до верхней части страницы.
Ответ №2:
обычно <a>
теги перенаправляют вас на ссылку, но вы можете избежать перенаправления, а затем применить пользовательскую функцию к <a>
тегу с помощью preventDafault
функции, которая остановит поведение элемента по умолчанию
function white(event) {
event.preventDefault()
const input = document.getElementById("weekly");
input.style.color = "white";
}
<ul>
<li><a id="weekly" href="/index.html" onclick="white(event,this)">Weekly</a></li>
</ul>
Ответ №3:
Ваш тот же самый фрагмент кода работает. Проблема, с которой вы столкнулись, заключается в том, что в вашем <a>
теге есть ссылка, то есть переход на, как я предполагаю, ту же страницу, поэтому страница перезагружается, и ссылка снова становится черной. Смотрите вслух href
(и более заметный цвет):
function white() {
const input = document.getElementById("weekly");
input.style.color = "green";
}
<ul>
<li><a id="weekly" onclick="white()">Weekly</a></li>
</ul>
Ответ №4:
Ваш фрагмент кода работает нормально, но может сделать его немного более общим, чтобы вы могли использовать его другими способами, как показано ниже.
// es6 "fat arrow" one liner
changeColor = (element, color) => element.style.color = color;
// maybe more familiar
// function changeColor(element, color) {
// element.style.color = color;
// }
<ul>
<li><a id="weekly" href="#" onclick="changeColor(this, 'red')">Weekly</a></li>
<li><a id="daily" href="#" onclick="changeColor(this, 'blue')">Daily</a></li>
<li><a id="hourly" href="#" onclick="changeColor(this, 'green')">Hourly</a></li>
</ul>