У меня есть Диалог на моей странице, который содержит поле ввода (Дата, Календарь). Проблема в том, что календарь открывается сразу после открытия диалога, потому что фокус установлен на первом входе.
Есть ли способ отключить фокус в Primefaces?
У меня есть Диалог на моей странице, который содержит поле ввода (Дата, Календарь). Проблема в том, что календарь открывается сразу после открытия диалога, потому что фокус установлен на первом входе.
Есть ли способ отключить фокус в Primefaces?
Вы можете изменить поведение по умолчанию;
http://forum.primefaces.org/viewtopic.php?f=3&t=29050
Вы всегда можете переопределять поведение по умолчанию для виджетов, например, чтобы предотвратить фокусировку календаря при открытии диалога;
PrimeFaces.widget.Dialog.prototype.applyFocus = function() {
var firstInput = this.jq.find(':not(:submit):not(:button):input:visible:enabled:first');
if(!firstInput.hasClass('hasDatepicker')) {
firstInput.focus();
}
}
исходный код:
PrimeFaces.widget.Dialog.prototype.applyFocus = function() {
this.jq.find(':not(:submit):not(:button):input:visible:enabled:first').focus();
}
Если вы поместите свое переопределение после ресурсов PrimeFaces, тогда ваша реализация applyFocus будет взята и использована вместо этого.
Я бы предложил создать файл js, такой как primefaces-overrides.js, и поместил бы что-то вроде этого внутри, один недостаток, хотя, поскольку вы кодируете низкоуровневую apis, вам нужно следить за регрессами во время миграций, хотя мы стремимся сохранить обратной совместимости, насколько мы можем.
Что-то более простое можно было бы установить фокус по умолчанию в другом входе, которое у вас есть.
<p:dialog id="dialog" header="Users" focus="savebtn" widgetVar="txtName">
Если вы вызываете из другого файла
<p:dialog id="dialog" header="Users" focus="savebtn" widgetVar="formRegUsers:txtName">
Еще одна попытка исправить эту проблему:
Я добавил текстовый ввод в качестве первого ввода диалогового окна в моем диалоговом окне:
<p:dialog id="myDialogId" widgetVar="myDialog"....
<p:inputText id="fixForFocusProblem"/>
<p:calendar ...
..
</p:dialog>
И при отображении диалога я вызываю это:
$('#myForm\\:fixForFocusProblem').show();
myDialog.show();
$('#myForm\\:fixForFocusProblem').hide();
Таким образом, фокус попадает на входной текст, который сразу становится невидимым.
Не так приятно, но он работает без визуального беспокойства.
Это также сделает:
<p:dialog onShow="$(document.activeElement).blur()" ...>
Или прайс-листы jQuery
<p:dialog onShow="jQuery(document.activeElement).blur()" ...>
добавьте этот script в ваш .xhtml:
PrimeFaces.widget.Dialog.prototype.applyFocus = function () {
var firstInput = this.jq.find(':not(:submit):not(:button):input:visible:enabled:first');
if (!firstInput.hasClass('hasDatepicker')) {
firstInput.focus();
}
}