Как я могу проверить новое значение текстового поля на нажатии клавиши?

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

function onkeypress(e) {
  var value = this.value;
  // do something with 
}

function onkeyup(e) {
  if ( e.which == 8 || e.keyCode == 46 ) { // delete or backspace keys
    this.onkeypress(e);
  }
}

Существует всего одна проблема все же. onkeypress запущен, прежде чем значение поля обновляется, поэтому когда я захватываю значение, я получаю предыдущее значение. Я использовал бы keyup исключительно, если бы я знал способ протестировать, изменил ли ключ значение или нет, но некоторые символы (как клавиши со стрелками) не имеют никакого эффекта на значение поля.

Какие-либо идеи?

10
задан spudly 19 January 2010 в 20:28
поделиться

5 ответов

Как я делаю это просто с Переменная по линиям PrevValue . В конце ключевой кнопки нажмите функцию, храните значение в этой переменной и снова выполните функцию, если значение не равно, что значение не равно, что предыдущее значение.

3
ответ дан 4 December 2019 в 01:57
поделиться

иметь еще один условный:

if(e.keyCode > 31  && e.keyCode < 127) {
    value = this.value + e;
}

Это будет ловить любой символ ASCII с низким уровнем уровня, введенный клавиатурой за пределами специального диапазона Char.

Редактировать: (32 пространство)

function onkeyup(e) {        
  if ( e.which == 8 || e.keyCode == 46 ) { // delete or backspace keys 
    switch(e.keyCode) {
      case 32:
      case 48..90:
      case 96..111:
      case 188:
      case 190..192: 
      case 219..222:
          value = this.value + e;
          break;
      default: 
          break;
    }       
    this.onkeypress(e);        
  }        
}
1
ответ дан 4 December 2019 в 01:57
поделиться

Я использовал JChart2D и JFreeChart. Летом я приложением живым плоттером и использовал для этого JFreeChart. Парень, который начал проект, использовал JChart2D, но я обнаружил, что у него недостаточно вариантов для изменения внешнего вида диаграммы.

JChart2D должен быть очень быстрым, поэтому, если вам нужно сделать живой график посмотрите на него, хотя JFreeChart не имел никаких проблем делать график несколько раз в секунду.

Существует также список библиотек диаграмм на java2s.com

-121--1665615-

Если я правильно понял, у вас есть слот, и в этом слоте вы обновляете изображение, показанное в QLabel. Но вы хотите, чтобы это изменение отображалось до завершения слота.

В этом случае выполните событие update () и вызовите qApp- > processEvents (). Этот метод обрабатывает события, которые ожидают в очереди событий, а затем возвращаются, поэтому это может быть то, что вы находитесь после.

PS: обновление () может вообще не понадобиться, я не уверен.

-121--2113788-

Вот мое окончательное решение, в котором используется переменная prevValue, но оно не загрязняет глобальное пространство имен (окно) или свойства элемента dom.

(function() {
  var input = document.getElementById('input_box'),
      prevValue;

  input.onkeyup = function(e) {
    if ( this.value != prevValue ) {
      prevValue = this.value;
      // execute some more code here...
    }
  }
}());

Обратите внимание выше, что функция onkeyup выполняет функцию замыкания вокруг переменной prevValue. Это предотвращает загрязнение пространства имен, поэтому мне не нужно создавать глобальную переменную или присоединять свойство к самому входному элементу. Это настолько элегантно, насколько я могу понять. Я на самом деле написал свой в jQuery, но думал, что ответ должен быть чистым JavaScript...

1
ответ дан 4 December 2019 в 01:57
поделиться

Это своего рода взлома, но вы можете поставить предыдущее значение в собственность текстового ящика (называется «атрибуты Excedo»)

function onkeypress(e) {
  this.oldvalue = this.value;
}

function onkeyup(e) {
  if (this.value != this.oldvalue) {
    // do something
  }
}
0
ответ дан 4 December 2019 в 01:57
поделиться

Вы можете хранить старое значение и обнаруживать, если он изменится:

function keyUpHandle(e) {
  if (this.prevValue && this.prevValue != this.value) {
    // do something
  }
  this.prevValue = this.value;
}
0
ответ дан 4 December 2019 в 01:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: