我的页面中有一个对话框,其中包含一个输入字段(Date, Calendar)。问题是打开对话框后直接打开日历,因为焦点设置在第一个输入上。
有没有办法在 Primefaces 中禁用焦点?
我的页面中有一个对话框,其中包含一个输入字段(Date, Calendar)。问题是打开对话框后直接打开日历,因为焦点设置在第一个输入上。
有没有办法在 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 实现将被拾取并使用。
我建议创建一个像 primefaces-overrides.js 这样的 js 文件并将这样的东西放入其中,这是一个缺点,因为您正在针对低级 api 进行编码,您需要在迁移期间注意回归,尽管我们的目标是保持向后兼容性尽我们所能。
默认情况下,可以在您拥有的另一个输入中设置更简单的焦点。
<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()" ...>
或者 Primefaces jQuery
<p:dialog onShow="jQuery(document.activeElement).blur()" ...>
在您的 .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();
}
}