Ваша главная проблема в том, что у вас есть:
var firstClick = true;
внутри обработчика событий click
, поэтому каждый раз, когда нажимается кнопка, он думает, что это первый щелчок. Вам нужно иметь этот набор вне обработчика событий и внутри, вы хотите переключить его на противоположное его текущему значению:
var firstClick = true;
function changeBackground() {
var myParas = document.getElementsByTagName("p");
for (var i = 0; i < myParas.length; i++) {
myParas[i].style.backgroundColor = "yellow";
}
var b = document.getElementById("button");
if (firstClick) {
b.textContent = "Click to unhighlight";
} else {
location.reload();
}
firstClick = !firstClick; // Toggle the first click variable
}
Но на самом деле вместо перезагрузки документа просто снимите выделение с абзацев. Перезагрузка требует больше ресурсов.
Избегайте использования getElementsByTagName()
, так как он возвращает «список активных узлов», который влияет на производительность.
Кроме того, вместо того, чтобы устанавливать явный обработчик события onload
, просто поместите ваш код внизу HTML body
.
Наконец, используйте современные стандарты обработки событий (.addEventListener
), а не свойства событий (onclick
).
Смотрите комментарии ниже:
// Place all this code inside of a `<script>` element and place that
// element at the bottom of the code, just before the closing body tag.
let btn = document.querySelector("button");
// Modern, standards-based way to set up event handlers
btn.addEventListener("click", changeBackground);
function changeBackground() {
// Use .querySelectorAll() and convert the results to an array
var myParas = Array.prototype.slice.call(document.querySelectorAll("p"));
// Loop over all the paragraphs
myParas.forEach(function(par){
// Toggle the CSS class to highlight/or unhighlight them
par.classList.toggle("highlight");
});
// Set the button text accordingly
btn.textContent = myParas[0].classList.contains("highlight") ? "Click to unhighlight" : "Click to highlight";
}
.highlight { background-color:yellow; }
<p>This is a test</p>
<h1>This is a test</h1>
<p>This is a test</p>
<p>This is a test</p>
<div>This is a test</div>
<p>This is a test</p>
<p>This is a test</p>
<button>Click to highlight</button>