我在页面上有一个对话框,其中包含一个输入字段(日期,日历)。问题是当打开对话框时,日历会直接弹出,因为焦点设置在第一个输入框上。
有没有一种方法可以在Primefaces中禁用焦点?
我在页面上有一个对话框,其中包含一个输入字段(日期,日历)。问题是当打开对话框时,日历会直接弹出,因为焦点设置在第一个输入框上。
有没有一种方法可以在Primefaces中禁用焦点?
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();
}
如果您有其他输入框,可以将焦点默认设置为更简单的内容。
<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();
将此脚本添加到您的 .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();
}
}
<p:dialog onShow="$(document.activeElement).blur()" ...>
或者是Primefaces jQuery
<p:dialog onShow="jQuery(document.activeElement).blur()" ...>
如果你在使用一个日期选择器,我建议这样使用:
<p:datePicker showOnFocus="false" showIcon="true" ... />