#javascript #jquery #drop-down-menu
#javascript #jquery — jquery — запрос #выпадающее меню #jquery
Вопрос:
для приведенного ниже выпадающего списка, когда я выбираю любое значение, я должен выполнить подтверждение (OK / Cancel), если пользователь выбирает Cancel, мне нужно сохранить предыдущее состояние. Что происходит, так это то, что при нажатии на Cancel и выполнении return false;
выбирается новое значение, а не сохраняется предыдущее значение. Как я могу убедиться, что выбрано предыдущее значение при нажатии кнопки Отмена. Я пытался использовать приведенный ниже код, но, похоже, это не помогает:
var ele = document.getElementById('mySelect');
ele.selected = ele.defaultSelected;
return false;
<select id="mySelect" multiple="multiple">
<option value="1">First</option>
<option value="2">Second</option>
<option value="3">Third</option>
<option value="4">Fourth</option>
</select>
Комментарии:
1. Вопрос помечен как ‘jquery’, но вы, кажется, не используете его, не так ли?
2. я также согласен с решением jquery.
Ответ №1:
Вот так 🙂
<script type="text/javascript">
$(document).ready(function () {
$("#mySelect").mousedown(function() {
var old_value = $("#mySelect").val();
var confirm_selection = confirm("Are you sure?");
if (!confirm_selection)
{
$("#mySelect").val(old_value);
return false;
}
});
});
</script>
Просто измените текст подтверждения на любой, который вам нравится.
Необходимо использовать mousedown() вместо change(), поскольку при использовании change функция будет вызвана ПОСЛЕ выбора нового элемента, и, следовательно, нет способа узнать, какой предыдущий элемент был выбран.
Комментарии:
1. Может возникнуть проблема, если пользователь вводит идентификатор с клавиатуры. Это случается нечасто, но может случиться.
2. Этот код работает, но запускает событие onchange, когда мы возвращаем значение обратно. Есть ли способ остановить это? Я предполагаю, что мой qn может быть нелогичным, поскольку событие запускается правильно, но я просто думаю, есть ли другой способ сделать это!
Ответ №2:
Я думаю — я думаю -, единственное решение — сохранить предыдущее выбранное значение и снова установить его на отмену. Вы можете легко установить значение вашего выбора с помощью val()
.
Кратко:
prev_val = $('#myselect').val();
if (cancel) {
$('#myselect').val(prev_val);
}
Комментарии:
1. ваш prev_val выдаст вам текущее выбранное значение (которое не совсем соответствует предыдущему состоянию)
2. Я слишком упрощаю код для ответа, но я имею в виду, что вы должны сохранить его
prev_val
перед действием пользователя.