2009-10-26 2 views
0

Мне нужно вызвать событие изменения ввода, но только если значение изменилось. И мне это нужно сделать с клавиатуры. Есть ли способ вызвать механизм изменения браузера, который либо инициирует событие изменения для запуска, либо не зависит от того, было ли изменено значение?Событие изменения ввода при размытии

Пример:

User clicks on an input field 
User does not modify value of the field 
user presses a key causing the input field to blue 
onchange does not get triggered. 

против

User clicks on an input field 
User modifies the value of the field 
user presses a key causing the input field to blue 
onchange gets triggered.  

Возможно ли это? Или мне нужно сделать значение сохранения onfocus, сравнить onblur и, возможно, вызвать onchange, но только если onchange еще не был вызван, потому что пользователь просто переместился, нажав vs, скажем, триггер клавиатуры.

ответ

1

Что это? Если этот ключ не является стандартным ключом ввода, установите onchange, чтобы проверить поле для изменения поля.

Вы также можете связать документ onkeypress с документом и вернуть: false; когда нажата клавиша, которая меняет входной сигнал на синий.

Это может помочь немного больше контекста.

+0

В основном, когда я нажимаю ввод в поле ввода, я имитирую нажатие клавиши табуляции, фокусируясь на следующем поле ввода (не обсуждая эту проблему). Однако мне нужно, чтобы мои обработчики изменений запускались, если элемент ввода меняет значение. Просто сосредоточение внимания на следующем поле не вызывает встроенный механизм изменения браузера. Использование jquery .focus() в следующем поле или .blur() для текущего не вызывает обработку изменений. Мне нужно вручную вызывать .change(), но я не хочу, чтобы это произошло, когда значение не было изменено, и я не хочу, чтобы он дважды вызывался, если пользователь нажимает на другое поле, вызывая его. –

+1

Вы пробовали обработчик onchange на самом поле - http://www.w3.org/TR/html401/interact/scripts.html#adef-onchange? – Cebjyre

+0

Я использую jQuery 1.2.6 для обработки событий. Я буду экспериментировать дальше. –

1

Если я вас правильно, вам нужны две переменные, чтобы помнить предыдущие и текущие состояния входа и слушателя для обработки взаимодействия:

<html> 
<head> 
<script language="javascript"> 
var startFieldValue = "Some value, possibly value of input when it is loaded"; 
var endFieldValue = ""; 
var focusFlag = 0; 
function interact(keyEvent) { 
    if(focusFlag == 1) 
     return true; 
    var key = keyEvent.keyCode? keyEvent.keyCode : keyEvent.charCode 
    if(String.fromCharCode(key) == "a") { 
     if(startFieldValue != endFieldValue) { 
      var elem = document.getElementById('input-to-be-changed'); 
      elem.style.backgroundColor = "blue"; 
      startFieldValue = endFieldValue; 
     } 
    } 
} 
</script> 
</head> 
<body onkeypress="interact(event);"> 
<input id="input-to-be-changed" onchange="endFieldValue = document.getElementById('input-to-be-changed').value;" onfocus="focusFlag = 1;" onblur="focusFlag = 0;"> 
</body> 

Просто прочитал комментарий на предыдущий пост, вы должны иметь глобальный идея о том, что происходит, все же. Изменения устраняют проверку фокуса и помещают listner (onkeypress) внутри каждого входа. Функция взаимодействия должна принимать 2 значения - событие и идентификатор входа для фокусировки. Также фокусировка нового элемента должна изменить startFieldValue. Извините, что не пишете сам код, но это немного поздно, и мне действительно нужен сон.

+0

Моя проблема: я могу легко запомнить предыдущее значение на фокусе, а затем проверить значение снова на размытие, если изменить, активировать событие изменения вручную. Однако мне нужно убедиться, что регулярное событие изменения, которое срабатывает при размывании из-за взаимодействий с мышью, не вызывает двухкратного запуска события изменения. –

+0

Я предполагаю, что после размытия ввода с клавиатуры (введите причину фокусировки следующего входа), onblur не будет запущен снова. Просто используйте onkeypress для прослушивания, и пусть onblur ничего не делает, оставьте его пустым. Если вам нужно одно и то же взаимодействие для обычного щелчка мыши на другом вводе, вы просто используете эти две переменные для значений полей. После завершения события взаимодействия скрипт меняет startFieldValue на EndFieldValue. И если они одинаковы, то есть ничего не изменилось или функция не была завершена для этого ввода только сейчас, код не будет запускаться (его в строке «if (startFieldValue!= EndFieldValue) {" –

-3

Не используйте методы jQuery blur() и focus(), но оригинальные Javascript-теги. Например: jQuery (selector) [0] .blur(); В моем случае методы jQuery работают только в браузере Opera.

+1

jQuery создан таким образом, что разработчикам не нужно беспокоиться о странности браузера, и поэтому он должен работать на всех браузерах, поэтому не знаете, откуда вы это взяли? – Skuld

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