JS pobranie poprzedniej wartości w evencie change/input

JS pobranie poprzedniej wartości w evencie change/input
SA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 5
0

Mam pytanie o JSa czystego bez jquery. Potrzebuję wiedzieć w evencie change jaka była wartość w select przed zmianą. Przykładowy kod:

Kopiuj
<select id="selInput">
        <option value="A">A</option>
        <option value="B">B</option>
        <option value="C">C</option>
        <option value="D">D</option>
    </select>
Kopiuj
<script>
     const selectInput = document.getElementById('selInput');

     selectInput.addEventListener('change', function (e) {
         if (e.beforeChangeValue == 'A' && this.value ==  'D') {     //jak dostać coś w stylu e.beforeChangeValue?
             //do something if changed A to D
         }
     });
 </script>

Jedyne rozwiązanie jakie przychodzi mi do głowy to zapisywanie do zmiennej *obok * wartości po każdej zmianie w select, tak by przy kolejnym wywołaniu eventa mieć poprzednią wartość. Tutaj jednak mam zastrzeżenie, bo robić się zaczyna spaghetti code, jeśli kod jest dużo bardziej rozbudowany i w kilku miejscach z kodu JSa nawet zmieniamy value selecta. Pamiętanie w każdym tym miejscu by do tej zmiennej obok zapisać poprzednią wartość tworzy bardzo słaby kod. W C# czy JAVA, bez problemu w evencie można otrzymać poprzednią i zaktualizowaną wartość.

TS
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 394
1

Nie trzeba robić spaghetti, możesz sobie zrobić funkcję pomocniczą.

Kopiuj
function addChangeListenerWithMemory (element, listener) {
  let previousValue = element.value;
  element.addEventListener('change', function (e) {
    e.beforeChangeValue = previousValue;
    previousValue = this.value;
    listener.call(this, e);
  });
}
Freja Draco
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3394
1

Możesz sobie dorobić w html własny atrybut oldValue i uniwersalną funkcję oldValue = value wywoływaną pod koniec każdej funkcji odpalanej na onchange.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.