Я пытаюсь пройти через форму выбора, чтобы увеличивать значение выбранной опции при каждом ее нажатии. Я поискал, но не нашел то, что мне нужно ... Вот html
var counter = 0;
function myFn(){
var myOptionIndex = document.getElementById('selectForm').selectedIndex;
var myOptionValue = document.getElementById('selectForm').value;
var myOption = document.getElementById('selectForm').options;
for (var i = 0; i < myOption[myOptionValue].value; i++) {
counter++;
}
document.getElementById('results').innerHTML = myOption[myOptionIndex].text
+ " has been selected " + counter + " times";
}<form action = "" id = "voteForm">
<select name = "select-form" id = "selectForm">
<option value = "1"> Option 1</option>
<option value = "1"> Option 2</option>
</select>
<button type = "button" id = "castVote" onclick = "myFn();">Cast Your
Vote
</button>
</form>
<div id = "results"></div>Изменить значение выбранного параметра. document.getElementById('selectForm').options[myOptionIndex].value = 'new value'



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


Прошу прощения за мой английский. По сути - скрипт будет работать только при изменении формы. То есть, если был выбран первый вариант, а выбрать его снова - счетчик не увеличится.
let increase=()=>results.innerText=`${selectForm.options[selectForm.selectedIndex].innerText} has been selected ${selectForm.options[selectForm.selectedIndex].value++} times`;
voteForm.addEventListener('change',increase);<form id = "voteForm" action = "">
<select id = "selectForm" name = "select-form">
<option value = "1"> Option 1</option>
<option value = "1"> Option 2</option>
</select>
<button id = "castVote" type = "button">
Cast Your
Vote
</button>
</form>
<div id = "results"></div>Нажатие на кнопку не увеличивает количество голосов за выбранный вариант. Он учитывается только при изменении выбора меню.
Я понимаю, что это всего лишь пример, но использование идентификаторов элементов в качестве глобальных переменных - действительно плохая идея. Если ваше намерение - меньше кода, тогда selectForm.options[selectForm.selectedIndex].innerText может быть selectForm.value (но имеет тот же идентификатор / глобальную проблему).
@RobG Я просто воспользовался уже имеющимися возможностями. Стартер указал на идентификатор элементов, который автоматически создает глобальные переменные. Поскольку они уже были, почему бы не использовать. Посоветуйте ему использовать классы, чтобы лучше определять элементы.
Вы никогда не меняете значение параметра, вы просто обновляете переменную counter. Эта одна переменная не содержит информации о каждой опции.
Нет необходимости в цикле, просто используйте выбранный индекс.
И вы должны установить начальные значения параметров в 0, поскольку ни один из них еще не получил голосов.
var counter = 0;
function myFn(){
var myOption = document.getElementById('selectForm').options;
var myOptionIndex = document.getElementById('selectForm').selectedIndex;
var myOptionValue = myOption[myOptionIndex].value;
myOptionValue++;
myOption[myOptionIndex].value = myOptionValue;
document.getElementById('results').innerHTML = myOption[myOptionIndex].text
+ " has been selected " + myOptionValue + " times";
}<form action = "" id = "voteForm">
<select name = "select-form" id = "selectForm">
<option value = "0"> Option 1</option>
<option value = "0"> Option 2</option>
</select>
<button type = "button" id = "castVote" onclick = "myFn();">Cast Your
Vote
</button>
</form>
<div id = "results"></div>На самом деле вам не нужен счетчик. Вы можете использовать переменную myOptionValue, так как она равна фактическому значению выбранной опции. Кроме того, петля for также не нужна. У вас уже есть переменная myOptionIndex, которая равна индексу выбранного option. Теперь вам просто нужно увеличить значение myOptionValue в функции и отобразить эту переменную вместо counter в вашем results - div.
Это выглядело бы так:
function myFn(){
var myOptionIndex = document.getElementById('selectForm').selectedIndex;
var myOptionValue = document.getElementById('selectForm').options[myOptionIndex].value;
var myOption = document.getElementById('selectForm').options;
myOptionValue++;
document.getElementById('selectForm').options[myOptionIndex].value++;
document.getElementById('results').innerHTML = myOption[myOptionIndex].text
+ " has been selected " + myOptionValue + " times";
}
Здесь также демонстрация этого примера в jsfiddle.
Вы пытаетесь увеличивать значение на 1 при каждом нажатии?