Существует древовидное меню в моем приложении и по щелчку пунктов меню, оно загружает URL в iFrame. Мне нравится устанавливать фокус в элементе страницы, загруженной в iFrame.
Я использую этот код, и он работает отлично во всех браузерах кроме IE:
var myIFrame = $("#iframeName");
myIFrame.focus();
myIFrame.contents().find('#inputName').focus();
Я попробовал все различные варианты как использование setTimeout, но никакой шанс.
После загрузок страницы, когда я поразил клавишу Tab, она переходит к второму входу, что означает, что это было на первом входе, но она не показывает курсор!
Я использую ExtJS и плагин ManagedIFrame.
Любая справка ценится.
почему бы не использовать назначенное свойство для этого, т.е. 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();
}
}
iFrame виден в нагрузке или показан позже? Элементы создаются в разном порядке, что является основой подхода setTimeout. Вы пробовали высокое значение времени ожидания на таймауте?
Попробуйте что-нибудь вроде полсекунды, чтобы протестировать...IE имеет тенденцию делать вещи в другом порядке, поэтому может понадобиться высокий таймаут, чтобы заставить его не запускаться до окончания рендера/рисовки:
$(function(){
setTimeout(function() {
var myIFrame = $("#iframeName");
myIFrame.focus();
myIFrame.contents().find('#inputName').focus();
}, 500);
});
Трудно устранить неполадки без рабочего примера, но вы можете попробовать прятаться и показывать ввод, чтобы принудительно, т.е. перерисовать элемент.
Что-то вроде:
var myIFrame = $("#iframeName");
myIFrame.focus();
myIFrame.contents().find('#inputName').hide();
var x = 1;
myIFrame.contents().find('#inputName').show().focus();
Это может войти, то есть в отображении курсора.