Я пытался переключаться между состояниями инвалидности двух входов на моем веб-сайте с помощью кнопки, прикрепленной к некоторому JavaScript. В моем текущем коде используются две кнопки, которые отключают один ввод и включают другой, однако это не очень практично. Я хотел знать, как я могу использовать одну кнопку и один скрипт для циклического переключения между состояниями инвалидности моих входов, это мой текущий код:
<script>
function switch_monthlyexpense()
{
document.getElementById("monthlyexpenses").disabled=false;
document.getElementById("monthlypexpenses").disabled=true;
}
</script>
<script>
function switch_monthlypexpense()
{
document.getElementById("monthlyexpenses").disabled=true;
document.getElementById("monthlypexpenses").disabled=false;
}
</script>
<button class = "btn btn-primary" onclick = "switch_monthlyexpense()" id = "monthlyexpensestoggle">Expenses</button>
<button class = "btn btn-primary" onclick = "switch_monthlypexpense()" id = "monthlypexpensestoggle">P Expenses</button>
<form id = "expenses_form" style = "visibility:visible;">
<div class = "form-group">
<div class = "form-group col-md-1">
<label for = "monthlyexpenses" id = "monthlyexpenseslabel">Monthly Expenses</label>
<input type = "number" class = "form-control" id = "monthlyexpenses" placeholder = "0" disabled>
</div>
<span class = "input-group-text" id = "dsign5">$</span>
</form>
<form id = "pexpenses_form" style = "visibility:visible;">
<div class = "form-group">
<div class = "form-group col-md-1">
<label for = "monthlypexpenses" id = "monthlypexpenseslabel">Monthly P Expenses</label>
<input type = "number" class = "form-control" id = "monthlypexpenses" placeholder = "0">
</div>
<span class = "input-group-text" id = "psign4">%</span>
</form>



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


disabled — это атрибут, поэтому вы можете установить его:
document.getElementById("myId").setAttribute('disabled', '');
И чтобы включить элемент:
document.getElementById("myId").removeAttribute('disabled');
Ваша первая функция будет выглядеть так:
function switch_monthlyexpense()
{
document.getElementById("monthlyexpenses").removeAttribute('disabled');
document.getElementById("monthlypexpenses").setAttribute('disabled', '');
}
Спасибо за решение, но это работает только для одного цикла, есть ли способ заставить его работать постоянно?
<script>
// use a variable to note which one is disabled
let selected = "monthlyexpenses"
function switchDisabled () {
// toggle the from "monthlyexpenses" to "monthlypexpenses" or vice versa
selected = selected === "monthlyexpenses" ? "monthlypexpenses" : "monthlyexpenses"
// check if the DOM disabled state is the same as the selected
document.getElementById("monthlyexpenses").disabled = selected === "monthlyexpenses";
document.getElementById("monthlypexpenses").disabled = selected === "monthlypexpenses";
}
</script>
<button class = "btn btn-primary" onclick = "switchDisabled()" id = "switch-button">Switch</button>
<form id = "expenses_form" style = "visibility:visible;">
<div class = "form-group">
<div class = "form-group col-md-1">
<label for = "monthlyexpenses" id = "monthlyexpenseslabel">Monthly Expenses</label>
<input type = "number" class = "form-control" id = "monthlyexpenses" placeholder = "0" disabled>
</div>
<span class = "input-group-text" id = "dsign5">$</span>
</form>
<form id = "pexpenses_form" style = "visibility:visible;">
<div class = "form-group">
<div class = "form-group col-md-1">
<label for = "monthlypexpenses" id = "monthlypexpenseslabel">Monthly P Expenses</label>
<input type = "number" class = "form-control" id = "monthlypexpenses" placeholder = "0">
</div>
<span class = "input-group-text" id = "psign4">%</span>
</form>
Всего одна кнопка и одна функция:
document.getElementById("monthlyexpenses").disabled = !document.getElementById("monthlyexpenses").disabled;