Как получить предыдущее и новое выбранное значение из дополнительного элемента DOM с помощью JavaScript? - PullRequest
10 голосов
/ 30 ноября 2010

Как я могу получить новое выбранное значение и предыдущее выбранное значение с помощью JavaScript, когда вызывается onChange или подобное событие?

<select size="1" id="x" onchange="doSomething()">
  <option value="47">Value 47</option>
  ...


function doSomething() {
  var oldValue = null; // how to get the old value?
  var newValue = document.getElementById('x').selected.value;
  // ...

Спасибо!:)

Ответы [ 4 ]

9 голосов
/ 30 ноября 2010

Используя прямой JavaScript и DOM, что-то вроде этого ( живой пример ):

var box, oldValue;

// Get a reference to the select box's DOM element.
// This can be any of several ways; below I'll look
// it up by ID.
box = document.getElementById('theSelect');
if (box.addEventListener) {
  // DOM2 standard
  box.addEventListener("change", changeHandler, false);
}
else if (box.attachEvent) {
  // IE fallback
  box.attachEvent("onchange", changeHandler);
}
else {
  // DOM0 fallback
  box.onchange = changeHandler;
}

// Our handler
function changeHandler(event) {
  var index, newValue;

  // Get the current index
  index = this.selectedIndex;
  if (index >= 0 && this.options.length > index) {
    // Get the new value
    newValue = this.options[index].value;
  }

  // **Your code here**: old value is `oldValue`, new value is `newValue`
  // Note that `newValue`` may well be undefined
  display("Old value: " + oldValue);
  display("New value: " + newValue);

  // When done processing the change, remember the old value
  oldValue = newValue;
}

(я предполагаю, что все вышеперечисленное находится внутри функции, как загрузка страницы)функция или аналогичная, как в живом примере , поэтому мы не создаем ненужные глобальные символы [box, oldValue, 'changeHandler`].)

Обратите внимание, что *Событие 1012 * вызывается разными браузерами в разное время.Некоторые браузеры вызывают событие, когда выбор изменяется, другие ждут, пока фокус не покинет поле выбора.

Но вы можете рассмотреть возможность использования такой библиотеки, как jQuery , Прототип , YUI , Закрытие или любой из нескольких других , поскольку они значительно облегчают эту работу.

5 голосов
/ 15 июня 2012

Смотрите здесь: Получение значения выбора (раскрывающегося списка) до изменения Я думаю, что лучше,

(function () {
    var previous;

    $("select").focus(function () {
        // Store the current value on focus, before it changes
        previous = this.value;
    }).change(function() {
        // Do something with the previous value after the change
        alert(previous);
    });
})();
2 голосов
/ 23 июля 2012

Следующий фрагмент кода может помочь

<html>
    <script type="text/javascript">
        this.previousVal;
        function changeHandler(selectBox)
        {
            alert('Previous Val-->'+selectBox.options[this.previousVal].innerHTML)
            alert('New Val-->'+selectBox.options[selectBox.selectedIndex].innerHTML)
            this.previousVal=selectBox.selectedIndex;
        }
    </script>
    <body>
        <select id="selectBox" onchange="changeHandler(this)">
            <option>Sunday</option><option>Monday</option>
            <option>Tuesday</option><option>Wednesday</option>
        </select>
        <script type="text/javascript">
            var selectBox=document.getElementById("selectBox")
            this.previousVal=selectBox.selectedIndex
        </script>
    <body>
</html>
1 голос
/ 03 февраля 2015

Ниже работало для меня.Добавьте ниже два события, чтобы выбрать HTML-тег: -

onFocus='this.oldValue = this.value'; //if required in your case add this line to other events like onKeyPressDown and onClick. 
onChange = 'alert(this.oldValue); this.value=this.oldValue'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...