Я преобразовываю значения на основе единиц (км до м, от lb до g и т. Д.). У меня есть работа, за исключением одной ошибки, которую я не могу решить.Обработка клавиатуры в раскрывающемся списке
Вот функция, которая обрабатывает события (преобразование происходит в JQuery плагин):
function unitConversion() {
var from;
// Remember which unit was selected in the drop down list.
$('select.unit').live('click', function() {
from = $(this).find('option:selected').text();
});
// Now handle the conversion.
$('select.unit').live('change', function() {
// Get the from and to values.
// var from = $(this).prev().find('option:selected').text();
var to = $(this).find('option:selected').text();
// Change the text for each field that corresponds with this component.
var textBoxes = $(this).closest('div.data-group').find('input:text');
textBoxes.each(function() {
var curValue = $(this).val();
$(this).val($(this).unitConvert({
value: curValue,
from: from,
to: to
}));
});
});
}
Это прекрасно работает (хотя, если у вас есть какие-либо усовершенствования этого кода, я всегда желая учиться). Однако первоначальная проблема, которую я испытывал, состояла в том, что я должен был помнить предыдущую выбранную единицу в раскрывающемся списке. Следовательно, событие «click», которое я делаю.
Это решение отлично работает ... до тех пор, пока человек использует мышь. Однако, если я вставляю в раскрывающийся список с клавиатурой и нажимаю клавиши со стрелками вверх/вниз, ничего не происходит. Я пробовал различные ключевые события *, и они тоже не работают. Что я должен делать здесь для ввода клавиатуры и мыши?
(Моя надежда, что событие изменения позволит мне получить доступ к ранее выбранному элементу, но это, кажется, не так.)
Update: Я хотел бы предоставить некоторые дополнительные разъяснения.
Если я использую событие фокуса, то преобразования становятся странными. Причина в том, что я только устанавливаю значение «from» в первый раз, когда получаю фокус. Если я хочу, чтобы преобразование выполнялось правильно каждый раз, я должен потерять фокус на раскрывающемся списке, а затем выполнить этот процесс. Не очень полезно.
Кроме того, по какой-либо причине, когда я ввожу в поле и затем нажимаю стрелки вверх и вниз, событие изменения не срабатывает. Я действительно не знаю, почему это так ...
Отличный ответ! Спасибо. Я не понимал, что данные даже существуют. Угадайте, что это показывает, что всегда есть чему поучиться. Большое спасибо. – JasCav