Установка Фокуса к iFrame в IE

Существует древовидное меню в моем приложении и по щелчку пунктов меню, оно загружает URL в iFrame. Мне нравится устанавливать фокус в элементе страницы, загруженной в iFrame.

Я использую этот код, и он работает отлично во всех браузерах кроме IE:

var myIFrame = $("#iframeName");
myIFrame.focus();
myIFrame.contents().find('#inputName').focus();

Я попробовал все различные варианты как использование setTimeout, но никакой шанс.

После загрузок страницы, когда я поразил клавишу Tab, она переходит к второму входу, что означает, что это было на первом входе, но она не показывает курсор!

Я использую ExtJS и плагин ManagedIFrame.

Любая справка ценится.

5
задан Amin Emami 11 January 2010 в 23:29
поделиться

3 ответа

почему бы не использовать назначенное свойство для этого, т.е. AssemblyQualifiedName ? Это свойство документировано как «может быть сохранено и позже использовано для загрузки типа».

GUID предназначен для взаимодействия COM.

-121--2835590-

Это будет полностью зависеть от используемого инструментария графического интерфейса пользователя. Я почти уверен, что SWT, например, будет автоматически подобрать новые размеры (так как он использует собственные виджеты). AWT может быть также для всех, что я знаю. Можете ли вы указать, какой набор инструментов вы используете и определили ли вы, что он еще не делает то, что вы хотите (и, возможно, как)?

-121--3186121-

Необходимо вызвать метод focus () объекта окна iframe , а не элемент iframe. Я не эксперт ни в jQuery, ни в ExtJS, поэтому мой пример ниже не использует ни то, ни другое.

function focusIframe(iframeEl) {
    if (iframeEl.contentWindow) {
        iframeEl.contentWindow.focus();
    } else if (iframeEl.contentDocument && iframeEl.contentDocument.documentElement) {
        // For old versions of Safari
        iframeEl.contentDocument.documentElement.focus();
    }
}
4
ответ дан 14 December 2019 в 04:38
поделиться

iFrame виден в нагрузке или показан позже? Элементы создаются в разном порядке, что является основой подхода setTimeout. Вы пробовали высокое значение времени ожидания на таймауте?

Попробуйте что-нибудь вроде полсекунды, чтобы протестировать...IE имеет тенденцию делать вещи в другом порядке, поэтому может понадобиться высокий таймаут, чтобы заставить его не запускаться до окончания рендера/рисовки:

$(function(){
  setTimeout(function() {
    var myIFrame = $("#iframeName");
    myIFrame.focus();
    myIFrame.contents().find('#inputName').focus();
    }, 500);
});
3
ответ дан 14 December 2019 в 04:38
поделиться

Трудно устранить неполадки без рабочего примера, но вы можете попробовать прятаться и показывать ввод, чтобы принудительно, т.е. перерисовать элемент.

Что-то вроде:

var myIFrame = $("#iframeName");
myIFrame.focus();
myIFrame.contents().find('#inputName').hide();
var x = 1;
myIFrame.contents().find('#inputName').show().focus();

Это может войти, то есть в отображении курсора.

1
ответ дан 14 December 2019 в 04:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: