Google Chrome: выберите содержимое элемента, которое остается видимым после размытия

0

У меня есть форма, содержащая элемент <select> содержащий параметры, которые изменяются в соответствии с другим значением поля.

Таким образом, когда элемент <select> получает фокус, если другое значение поля не установлено, событие размытия запускается по предыдущему, и фокус запускается последним.

здесь упрощенная версия моего кода:

$(document).on('focus', '#requiresOuterValue', 
function() {
    if( isNaN(parseInt( $('#outerValue').val() )) )
    {
        $('#outerValue').trigger('focus');
    }
});

код работает отлично (выпадающий контент исчезает, #outerValue получает фокус) в firefox, но не в chrome, где #outerValue получает фокус, но также отображается содержимое элемента <select>.

  • 0
    Вы должны опубликовать код, который не работает в Chrome, а не код, который уже работает
  • 0
    @Jonathan: код, который я разместил в alredy, это то, что не работает: jsfiddle.net/C9rKL
Показать ещё 4 комментария
Теги:
javascript-events
google-chrome
focus

2 ответа

0

Ну, я придумал решение.

Ваша проблема в том, что закрытие 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-плагина

Вы даже можете реализовать плагин 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();
        }
});
0

Mmm.. Вы пытались использовать собственный метод "focus" вместо события "focus" jquery?

$('#outerValue')[0].focus();

Я не уверен, что запуск jQuery-событий имеет неявное поведение на основе браузера.

  • 0
    фокус работает, он говорит, что скрытый код не работает ... 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.
  • 0
    Опс .. Это правда :( Извините.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню