У меня есть форма, содержащая элемент <select>
содержащий параметры, которые изменяются в соответствии с другим значением поля.
Таким образом, когда элемент <select>
получает фокус, если другое значение поля не установлено, событие размытия запускается по предыдущему, и фокус запускается последним.
здесь упрощенная версия моего кода:
$(document).on('focus', '#requiresOuterValue',
function() {
if( isNaN(parseInt( $('#outerValue').val() )) )
{
$('#outerValue').trigger('focus');
}
});
код работает отлично (выпадающий контент исчезает, #outerValue получает фокус) в firefox, но не в chrome, где #outerValue получает фокус, но также отображается содержимое элемента <select>
.
Ну, я придумал решение.
Ваша проблема в том, что закрытие select
не является стандартным для всех браузеров. единственный способ, которым я нашел, чтобы имитировать замыкание, - это перерисовать select
.
Вот код:
$(document).on('focus', '#requiresOuterValue', function() {
var requiresOuterValue = $("#requiresOuterValue").clone();
if( isNaN(parseInt( $('#outerValue').val() )) )
{
$('#outerValue').trigger('focus');
$("#requiresOuterValue").replaceWith(requiresOuterValue);
}
});
EDIT: скрипку здесь http://jsfiddle.net/JonnyMe/C9rKL/1/
Вы даже можете реализовать плагин jQuery для достижения цели:
$.fn.closeSelect = function() {
if($(this).is("select")){
var fakeSelect = $(this).clone();
$(this).replaceWith(fakeSelect);
}
};
И затем используйте его так:
$(document).on('focus', '#requiresOuterValue', function() {
if( isNaN(parseInt( $('#outerValue').val() )) )
{
$('#outerValue').trigger('focus');
$("#requiresOuterValue").closeSelect();
}
});
Mmm.. Вы пытались использовать собственный метод "focus" вместо события "focus" jquery?
$('#outerValue')[0].focus();
Я не уверен, что запуск jQuery-событий имеет неявное поведение на основе браузера.
the code works fine (dropdown disappears, #outerValue gains focus) in firefox but not in chrome, where #outerValue gains focus, but the item contents are displayed as well.