2016-01-14 3 views
4
$("#myTextBox").on("change paste keyup", function() { 
    alert($(this).val()); 
}); 

Как сравнить новое значение, введенное пользователем, и текущее значение, которое уже было на входе?on() посмотреть изменения во входных данных

+2

Вы» Вам нужно сохранить исходное значение в переменной. У DOM нет такой информации AFAIK. – Jeroen

ответ

1

Сверх того, атрибут ввода value фактически не обновляется при изменении его значения. Таким образом, вы можете просто сравнить .val() к attr("value") и обновить attr("value") после внесения изменения:

EG:

$("#myTextBox").on("change paste keyup", function() { 
 
    alert($(this).attr("value")+" vs "+$(this).val()); 
 
    $(this).attr("value",$(this).val()); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input id="myTextBox" value="abc" />

+0

как насчет элемента 'select'? – Jennifer

+0

@Jennifer, если вы спросите, будет ли это работать с полями 'select', то no, selects не имеют атрибута value. Вам понадобится нечто более надежное, например https://jsfiddle.net/jntc3jfv/ – Moob

2

Вы можете сохранить предыдущее значение для самого элемента и получить его при изменении значения.

$("#myTextBox").on("change paste keyup", function() { 
 
    // Get previous and current value 
 
    var prevValue = $(this).data('value'), 
 
    currValue = $(this).val(); 
 
    console.log(prevValue + ' === ' + currValue); 
 

 
    // Update the prevValue 
 
    $(this).data('value', currValue); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script> 
 
<input id="myTextBox" type="text" />

3

Здесь вы можете использовать замыкание:

$("#myTextBox").on("change paste keyup", (function() { 
 
    var previousValue = $("#myTextBox").val(); 
 
    return function() { 
 
     var newValue = $(this).val(); 
 
     alert('Was ' + previousValue + " and now it's " + newValue); 
 
     previousValue = newValue; 
 
    }; 
 
})());
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input id="myTextBox" value="abc" />

Причина слегка извилистый закрытия: она создает переменную previousValue, что имеет продолжительность жизни больше, чем функция обработчика, но все же может быть доступна только этой функцией обработчика. Вы гарантированно не должны иметь именования коллизий с другими частями вашего кода.

+1

хорошее решение !! Я думаю о возврате предыдущего значения в clickEvent TextBox, но ваше решение более чистое и понятное. – Sapikelio

+0

Хм, зачем вам нужна функция в этом случае? и это функция возврата? Я не получаю это в части функции, выполняет ли функция позже? если да, то каково возвращение? – Jennifer

+0

@Jennifer - Внешняя функция называется разом, сразу. Он генерирует новую функцию, которая действует как обработчик. Эта функция обработчика вызывается для каждого изменения и имеет доступ к переменной 'previousValue'. Вот страница о закрытии javascript: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Closures –

0

В принципе вы можете сохранить любое значение в JavaScript вы можете сохранить или Сохраняйте предыдущие данные тремя распространенными способами:

  1. Сделать Variab ле и устанавливается значение перед изменением
  2. Нажмите на массив
  3. Добавьте его к объекту как ценность и т.д.

Лучший способ вы делаете это с помощью переменной, так что-то вроде этого : var previousValue = $ (this) .val();

и доступ к нему после того, как ...

$("#myTextBox").on("change paste keyup", function() { 
    var preValue = $(this).val(); 
    return function() { 
     var newValue = $(this).val(); 
     consol.log('preValue: ' + preValue + 'newValue: ' + newValue); 
     preValue = newValue; 
    }; 
}); 

Возвращение происходит после того, как, так что он работает любит обратный вызов, в основном это происходит после того, как и в этом случае вы можете сохранить обе переменные ...

+0

4. Эффективно и правильно используйте Markdown. Надеюсь, это поможет. –

+1

Спасибо, да, по каким-то причинам мой SOF не принял мой CRTL + K :) – Alireza

+0

, чтобы функция выполнялась позже? хороший трюк! – Jennifer

Смежные вопросы