Примечание. Этот вопрос определенно не касается каскадного выбора . Это я умею делать. Пожалуйста, прочитайте, прежде чем отмечать как дубликат, вы увидите, что это не каскад, это взаимозависимость.
Я пишу форму, которая включает в себя фильтрацию результатов поиска по годам. Я использовал два выпадающих (выберите) поля для этого с идентификаторами «от» и «до». «Логика» приложения, очевидно, потребует, чтобы значение «to» было> = значением «from». Я хотел бы, чтобы это было отражено на уровне представления. А именно, если я выбрал «1998» в раскрывающемся списке «из», то мне будет разрешено выбирать только те варианты, которые больше, чем в раскрывающемся списке «до», и наоборот .
Я реализовал минимальный пример для этого, который показан ниже. Это решение хорошо работает, если пользователь выбирает опцию «от», затем опцию «до» и затем переходит. Тем не менее, если пользователь продолжит переходить туда-сюда, проблемы начнут появляться. Причина этого в том, что я переустанавливаю HTML всех опций для выбора, когда другой выбор изменяется. Но это также приводит к сбросу «по умолчанию».
Так, например, если я выберу «3» в «from» (в примере ниже), затем выберу «5» в «to», а затем вернусь и выберу «2» в «from», Поле «to» сбрасывается в «2», хотя «5» было правильным выбором.
У меня вопрос: есть ли лучший способ сделать это, чем использовать ".innerHTML" и сбросить весь список опций? Или мне просто нужно вручную вернуть значение по умолчанию к тому, что было, если оно все еще действует?
Надеюсь, это несколько ясно. Я новичок в интерфейсе, извиняюсь. Код ниже:
function updateTo(e) {
var to = document.getElementById("to");
update(to, e.value, 6);
}
function updateFrom(e) {
var from = document.getElementById("from");
update(from, 1, e.value);
}
function update(elmnt, beginValue, endValue) {
selections = ""
for (var i = beginValue; i <= endValue; i++) {
selections += "<option>" + i.toString() + "</option>";
elmnt.innerHTML = selections;
}
}
<h3>FROM:</h3>
<select id="from" onchange="updateTo(this)">
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option>5</option>
<option>6</option>
</select>
<h3>TO:</h3>
<select id="to" onchange="updateFrom(this)">
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option>5</option>
<option>6</option>
</select>