У меня есть единственное поле формы, и я должен быть в состоянии обнаружить, когда поле изменяется, и выполните некоторый дополнительный код с помощью нового значения поля. Я только хочу выполнить код, если ключ, продвинутый на самом деле, изменяет значение текстового поля. Вот решение, которое я предложил.
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 исключительно, если бы я знал способ протестировать, изменил ли ключ значение или нет, но некоторые символы (как клавиши со стрелками) не имеют никакого эффекта на значение поля.
Какие-либо идеи?
Как я делаю это просто с Переменная по линиям PrevValue
. В конце ключевой кнопки нажмите функцию, храните значение в этой переменной и снова выполните функцию, если значение не равно, что значение не равно, что предыдущее значение.
иметь еще один условный:
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);
}
}
Я использовал 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...
Это своего рода взлома, но вы можете поставить предыдущее значение в собственность текстового ящика (называется «атрибуты Excedo»)
function onkeypress(e) {
this.oldvalue = this.value;
}
function onkeyup(e) {
if (this.value != this.oldvalue) {
// do something
}
}
Вы можете хранить старое значение и обнаруживать, если он изменится:
function keyUpHandle(e) {
if (this.prevValue && this.prevValue != this.value) {
// do something
}
this.prevValue = this.value;
}