Как захватить старое значение и установить его обратно при отмене, используя JavaScript

У меня есть текстовое поле, из которого я вызываю функциюonChange событие. Я выбрасываю окно подтверждения, когда значение в этом текстовом поле изменяется. Если нажать кнопку «Отмена» (в окне подтверждения), старое значение должно быть возвращено в текстовое поле. При нажатии кнопки «Продолжить» или «ОК» новое значение должно быть сохранено. Я пытался это в течение длительного времени, но не могу сохранить прежнее значение.

Например: перед заменой, val в текстовом поле = 'первый'; Событие onChange, значение val изменено на 'второй», откройте окно подтверждения, если у выбранного текстового поля все в порядке, и если отмена выбрана 'первый' должен присутствовать в текстовом поле.

function onChangeOfValue(input){
    //var oldValue = document.getElementById(input).value;
    document.getElementById(input).onchange = function(){
    var newValue = this.value;
    alert("newVal is--->"+newValue);
    if(document.getElementById(input) != null && document.getElementById(input) != '' 
    && !confirm("Do you want to continue?")){

    // this.input=oldValue;
        return false;
    }
    }

}
 ericosg05 июн. 2013 г., 06:56
я использую defaultValue для хранения моего oldValue
 Anuj Balan05 июн. 2013 г., 07:10
Как это сделать ?
 Anuj Balan05 июн. 2013 г., 06:47
Поиск значения, присутствующего в этом текстовом поле, перед попыткой изменения.
 ericosg05 июн. 2013 г., 06:44
вы'ищу.defaultValue

Ответы на вопрос(2)

(function(){ 
    var oldValue = document.getElementById(input).value;
    document.getElementById(input).onchange = function(){
        var newValue = this.value;
        alert("newVal is--->"+newValue);
        if(document.getElementById(input) != null 
            && document.getElementById(input) != '' 
            && !confirm("Do you want to continue?")){

            this.value = oldValue;
            return false;
        } else {
            oldValue = this.value;
        }
    };
})();
 RobG05 июн. 2013 г., 07:19
Этот подход будет работать только для одного ввода, так как вы можете хранить только одно значение. Если вы хотите хранить больше, вы 'Вам нужно будет принять схему для хранения значений для нескольких входов.
 Adam Rackis05 июн. 2013 г., 06:48
Закрытие в основном означает, что функция имеет доступ к контексту, существовавшему на момент ее вызова. Я'я говорю, что замена вашего обработчика onchange на то, что у меня есть, должна дать вам то, что вы хотите
 Adam Rackis05 июн. 2013 г., 07:29
@AnujBalan - не уверен - сначала поместите предупреждение в обработчик событий и убедитесь, чтозовут вообще. Затем проверьте, как и где добавляется обработчик
 Anuj Balan05 июн. 2013 г., 07:33
Первый раз он не вызывается внутри обработчика. При изменении этого текстового поля вызывается написанная мною функция, но она не входит в функцию замыкания, которую вы дали.
 Anuj Balan05 июн. 2013 г., 07:27
Там'Это проблема. После загрузки страницы в текстовом поле появляется некоторое значение. Когда я изменяю это в первый раз, это не идет внутрьdocument.getElementById(input).onchange = function(){и значение меняется на то, что мы даем, без какого-либо окна подтверждения. Со второго раза это происходит внутри функции onChange и подтверждается
 Anuj Balan05 июн. 2013 г., 06:48
Предположим, что идентификатор текстового поля равен 'Главная', тогда var oldValue = document.getElementById ("Главная"); будет захватывать oldValue до изменения?
 Anuj Balan05 июн. 2013 г., 07:13
аааа ... это был oldVal = "первый" изначально и вот почему я добавил второй комментарий. ;) Сейчас работает ... Спасибо за знания и Время Адам
 Adam Rackis05 июн. 2013 г., 06:54
Следует - внимательно прочитать код - oldValue присваивается новое значение ввода в качестве последней строки обработчика, при условии, что оно не было возвращено к oldValue
 Anuj Balan05 июн. 2013 г., 06:47
Я не знаю, что такое закрытие (новичок в JS). На данный момент onChange этого текстового поля будет вызыватьonChangeOfValue» функция. Вы хотите, чтобы я добавил вышеуказанный код в это? Это автоматически захватит старое значение? Я сомневаюсь, что.
Решение Вопроса

значение по умолчанию свойство, которое является значением по умолчанию (на удивление). Это свойство можно использовать для сохранения предыдущего значения ввода или для возврата значения к предыдущему значению.

Таким образом, собирая предложения, которые выПосле получения следующей функции передается ссылка на элемент, которая спрашивает пользователя, хотят ли они сохранить текущее значение. Если они ответят да, тозначение по умолчанию вход установлен на текущийзначение, Если пользователи говорят «нет» (то есть отменить), тозначение сбрасывается назначение по умолчанию.

Обратите внимание, что этот подход перезапишет оригиналзначение ввода, поэтому если вы сбросите форму,значение будет сброшен к текущемузначение по умолчанию.

<script>
function onChangeOfValue(element) {
  var oldValue = element.defaultValue;
  var newValue = element.value;
  if (window.confirm('do you really want to change the value to ' + newValue + '?')) {
    element.defaultValue = newValue;
  } else {
    element.value = element.defaultValue;
  } 
}
</script>

<input onchange="onChangeOfValue(this);">

Этот подход будет работать для любого количества входов на той же странице и в форме.

 Anuj Balan05 июн. 2013 г., 07:53
defaultValue работал. Спасибо !!!!
 RobG05 июн. 2013 г., 10:28
значение по умолчанию собственность была вокруг навсегда, этоочень хорошо поддерживается.
 Anuj Balan05 июн. 2013 г., 07:53
@AdamRackis: Этот подход работал, так что никаких проблем !!!
 Adam Rackis05 июн. 2013 г., 07:34
Ааа - я чувствую себя глупо - defaultValue выбирает любое значение, с которым вы отображаете ввод. Ухоженная. Все еще не уверен, работает ли он в IE8 - я думаю, jsFiddle нене хорошо с ним играть
 Adam Rackis05 июн. 2013 г., 07:29
+1 от меня - не уверен, кто проголосовал. Любопытно, работает ли defaultValue в старых браузерах? Я имею в виду, очевидно, вы всегда можете установить такое свойство в коде, но если вы делаете будет ли foo по-прежнему отображаться в текстовом поле в IE8 и будет отображаться как начальное значение element.defaultValue?

Ваш ответ на вопрос