#javascript #html #loops #onmouseover
#javascript #HTML #циклы #onmouseover
Вопрос:
Пытаюсь сделать так, чтобы при наведении курсора мыши на элемент в навигаторе он выделялся жирным шрифтом при наведении курсора мыши. Я знаю, что есть способы сделать это на других языках, но я пытаюсь выучить JS.
<body>
<p>
If you ask I will give you:
</p>
<ul id = 'nav_1'>
<li>Some nice chocolate cake</li>
<li>A fresh-brewed cup of coffee</li>
<li>An honest compliment</li>
<li>A brand new Porsche</li>
</ul>
<script type="text/javascript">
"use strict";
const nav1 = document.getElementByID('nav_1');
const listItems = nav1.getElementsByTagName("li");
for(let i = 0;i<listItems.length;i ){
listItems[i].onmouseover = function(){
document.listItems[i].style.fontWeight = "bold";
}
listItems[i].onmouseleave = function(){
document.listItems[i].style.fontWeight = "normal";
}
}
</script>
</body>
Комментарии:
1. Привет, Майкл, если один из приведенных ниже ответов решил вашу проблему, пожалуйста, примите один из них, чтобы закончить этот вопрос. Спасибо!
Ответ №1:
Привет, Майкл, и добро пожаловать в StackOverflow.
Для этого я бы рекомендовал вам использовать CSS вместо JS. Так проще и эффективнее
#nav_1 li:hover { /* Bold li element on hoverin nav_1 elements */
font-weight: bold;
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<p>
If you ask I will give you:
</p>
<ul id = 'nav_1'>
<li>Some nice chocolate cake</li>
<li>A fresh-brewed cup of coffee</li>
<li>An honest compliment</li>
<li>A brand new Porsche</li>
</ul>
</body>
</html>
Это было бы решением JS. Ваша проблема в обратном вызове. document
не имеет переменной listItems
, с которой вы могли бы ее спутать window
. В getElementByID
нем также должна быть опечатка getElementById
, функции JS чувствительны к регистру.
<body>
<p>
If you ask I will give you:
</p>
<ul id = 'nav_1'>
<li>Some nice chocolate cake</li>
<li>A fresh-brewed cup of coffee</li>
<li>An honest compliment</li>
<li>A brand new Porsche</li>
</ul>
<script type="text/javascript">
"use strict";
const nav1 = document.getElementById('nav_1');
const listItems = nav1.getElementsByTagName("li");
for(let i = 0;i<listItems.length;i ){
listItems[i].onmouseover = function(e){
listItems[i].style.fontWeight = "bold";
}
listItems[i].onmouseleave = function(e){
listItems[i].style.fontWeight = "normal";
}
}
</script>
</body>
Ответ №2:
Произошла небольшая опечатка getElementByID
, последняя буква должна быть строчной d
. Затем удалите document
listItems
переменную.
Как указал Виталий, CSS был бы лучшим способом обработки (никаких сценариев не требовалось), но придерживаясь javascript:
"use strict";
const nav1 = document.getElementById('nav_1');
const listItems = nav1.getElementsByTagName("li");
for(let i = 0; i < listItems.length; i ){
listItems[i].onmouseover = function(){
listItems[i].style.fontWeight = "bold";
}
listItems[i].onmouseleave = function(){
listItems[i].style.fontWeight = "normal";
}
}
<p>
If you ask I will give you:
</p>
<ul id='nav_1'>
<li>Some nice chocolate cake</li>
<li>A fresh-brewed cup of coffee</li>
<li>An honest compliment</li>
<li>A brand new Porsche</li>
</ul>