#javascript #button
#javascript #кнопка
Вопрос:
Я недавно начал изучать JavaScript, и я хотел бы создать кнопку с функцией, которая изменяет innerHTML по щелчку. При первом щелчке он изменяет текст, но после этого ничего. Есть идеи, как я мог это исправить? Вот код до сих пор:
let Button = document.getElementById("Btn");
Button.onclick = function change() {
let turnedOn = false;
if (Boolean(turnedOn) == false) {
Button.innerHTML = "START";
turnedOn = true;
} else {
Button.innerHTML = "STOP";
turnedOn = false;
}
}
<Button id="Btn">STOP</button>
Комментарии:
1. Когда вы вызываете функцию onclick, вы
turnedOn
каждый раз устанавливаете значение false, и, следовательно, первоеif
значение всегда будет true. ПереместитеturnedOn
переменную за пределыonclick
функции. Кроме того, нет причин принуждатьturnedOn
,Boolean()
поскольку это уже логическое значение.
Ответ №1:
Вы должны установить turnedOn
флаг вне метода click, иначе он всегда будет false при щелчке.
Также вы устанавливаете флаг turnedOn
внутри if-else
инструкции обратным образом.
Примечание: поскольку вы меняете только текст, вы можете использовать textContent
const button = document.getElementById("btn")
let turnedOn = false
button.addEventListener('click', e => {
if (turnedOn) {
turnedOn = false
e.currentTarget.textContent = 'Start'
} else {
turnedOn = true
e.currentTarget.textContent = 'Stop'
}
})
<button id="btn">Start</button>
Ответ №2:
Проблема в том, что вы устанавливаете для переменной turnedOn значение false в начале функции.
Вы можете просмотреть HTML, чтобы узнать, каково текущее состояние кнопки, а затем решить, включить или выключить кнопку.
<button id="Btn">START</button>
<script>
let Button = document.getElementById("Btn");
Button.onclick = function change () {
if(Button.innerHTML == "START")
{
Button.innerHTML = "STOP";
}
else
{
Button.innerHTML = "START";
}
}
</script>
Ответ №3:
Использование javascript и do’nt jquery
<button id="btnTest" onclick="myclick()">Click OFF</button>
<script>
function myclick() {
var btnTest = document.getElementById("btnTest");
if(btnTest.innerHTML == "Click OFF"){
btnTest.innerHTML = "Click ON";
} else {
btnTest.innerHTML = "Click OFF";
}
}
</script>
Ответ №4:
Проблема в том, что ваша turnedOn
переменная существует только в функции обработчика щелчков. Таким образом, он снова устанавливается на то же значение при каждом нажатии. Вы могли бы создать глобальную переменную или :-
Создайте небольшой ToggleButton
объект. Чтобы инкапсулировать логику для переключения кнопки. Он может переключаться сам или другие элементы могут переключать его.
<html>
<body>
<button id="toggleButt">Toggle</button>
<button id="toggleOtherButt">Toggle</button>
</body>
<script>
function ToggleButton(elem) {
this.elem = elem;
this.on = false;
this.render();
elem.addEventListener("click", () => this.toggle());
}
ToggleButton.prototype.toggle = function() {
this.on = !this.on;
this.render();
}
ToggleButton.prototype.render = function() {
this.elem.textContent = (this.on) ? "On" : "Off";
}
const but = new ToggleButton(document.getElementById("toggleButt"));
document.getElementById("toggleOtherButt").addEventListener("click", () => but.toggle());
</script>
</html>
Комментарии:
1. зачем усложнять то, что просто?
2. Конечно, я согласен, что это более сложный ответ, чем другой, но, поскольку вы уже указали, я просто предоставляю альтернативу. Надеюсь, что OP может узнать, как такая функциональность может стать многоразовой.