Я хочу добиться того, чтобы при каждом изменении <select>
раскрывающегося списка я хотел, чтобы значение раскрывающегося списка было изменено. Я использую 1.3.2 версию jQuery и использую событие change, но значение, которое я получаю, остается после изменения.
<select name="test">
<option value="stack">Stack</option>
<option value="overflow">Overflow</option>
<option value="my">My</option>
<option value="question">Question</option>
</select>
Допустим, в настоящее время опция My выбрана сейчас, когда я изменяю ее на стек в событии onchange (то есть, когда я меняю ее на стек), я хочу, чтобы это было предыдущее значение, т.е. мое ожидание в этом случае.
Как этого достичь?
Изменить: в моем случае у меня есть несколько полей выбора на одной странице и хочу, чтобы ко всем из них применялась одна и та же вещь. Также все мои выбранные вставляются после загрузки страницы через ajax.
javascript
jquery
jquery-events
Alpesh
источник
источник
Ответы:
Объедините событие фокуса с событием изменения, чтобы достичь желаемого:
Рабочий пример: http://jsfiddle.net/x5PKf/766
источник
$(this).blur();
в конце функции измененияпожалуйста, не используйте глобальную переменную для этого - сохраните значение prev в данных, вот пример: http://jsbin.com/uqupu3/2/edit
код для ссылки:
только что увидел, что у вас есть много выборок на странице - этот подход также будет работать для вас, так как для каждого выбора вы будете сохранять предыдущее значение в данных выбора
источник
jQuery.data
любом случае.select
! Принятый ответ будет нарушен, так как он соответствует всем,select
но сохраняет только значение первого.data
это лучший способ сделать это. +1 :)Я иду на решение Ави Пинто, которое использует
jquery.data()
Использование фокуса не является правильным решением. Он работает при первом изменении параметров, но если вы останетесь на этом элементе выбора и нажмете клавишу «вверх» или «вниз». Это не будет проходить через событие фокуса снова.
Таким образом, решение должно быть больше похоже на следующее,
источник
var $selectStatus = $('.my-select'); $selectStatus.on('change', function () { var newStatus = $(this).val(); var oldStatus = $(this).data('pre'); }).data('pre', $selectStatus.val());
$('mySelect').data('pre', $(this).val());
Это должно быть так:$('mySelect').each(function() { $(this).data('pre', $(this).val()); });
У меня недостаточно репутации, чтобы редактировать ответ: /Отслеживайте стоимость вручную.
источник
источник
Я использую событие «live», мое решение в основном похоже на Dimitiar, но вместо «focus» мое предыдущее значение сохраняется при срабатывании «click».
источник
сохраните текущее выбранное выпадающее значение с выбранным jquery в глобальной переменной, прежде чем писать выпадающую функцию действия «при изменении». Если вы хотите установить предыдущее значение в функции, вы можете использовать глобальную переменную.
источник
Как насчет использования пользовательского события jQuery с угловым интерфейсом типа часов;
источник
Я знаю, что это старая ветка, но подумал, что могу добавить немного больше. В моем случае я хотел передать текст, val и некоторые другие данные. В этом случае лучше хранить весь параметр как предыдущее значение, а не только значение val.
Пример кода ниже:
РЕДАКТИРОВАТЬ:
Я забыл добавить .clone () на элемент. не делая этого, когда вы пытаетесь вернуть значения, вы в конечном итоге получаете новую копию выбора, а не предыдущую. Использование метода clone () сохраняет копию выбора вместо его экземпляра.
источник
Ну, почему бы вам не сохранить текущее выбранное значение, и когда выбранный элемент будет изменен, у вас будет сохранено старое значение? (и вы можете обновить его снова, как вы хотите)
источник
Используйте следующий код, я проверил его и его работу
источник
источник
Я хотел бы предложить еще один вариант решения этой проблемы; поскольку предложенные выше решения не решили мой сценарий.
Это действительно использует jQuery, так что def. здесь есть зависимость, но она может быть адаптирована для работы в чистом JavaScript. (Добавьте слушателя к телу, проверьте, была ли исходная цель выбором, выполнить функцию, ...).
Прикрепив прослушиватель изменений к телу, вы можете быть уверены, что он сработает после определенных прослушивателей для выбора, в противном случае значение «data-previous» будет перезаписано до того, как вы сможете его прочитать.
Это, конечно, предполагает, что вы предпочитаете использовать отдельных слушателей для вашего set-previous и check-value. Это вписывается в шаблон с единой ответственностью.
Примечание. Это добавляет эту «предыдущую» функциональность ко всем выборам, поэтому при необходимости обязательно настройте их.
источник
Это улучшение ответа @thisisboris. Он добавляет текущее значение к данным, поэтому код может контролировать изменение переменной, установленной на текущее значение.
источник
Лучшее решение:
источник
Есть несколько способов достичь желаемого результата, это мой скромный способ сделать это:
Пусть элемент содержит свое предыдущее значение, поэтому добавьте атрибут «previousValue».
После инициализации «previousValue» теперь можно использовать в качестве атрибута. В JS для доступа к предыдущему значению этого выберите:
После того, как вы закончили использовать 'previousValue', обновите атрибут до текущего значения.
источник
Мне нужно было показать другой div в зависимости от выбора
Вот как вы можете сделать это с помощью синтаксиса jquery и es6
HTML
JS
источник