我的页面中有一个对话框,其中包含一个输入字段(日期,日历)。问题是打开对话框后日历会立即打开,因为焦点是在第一个输入上设置的。
有没有办法在Primefaces中禁用焦点?
答案 0 :(得分:16)
您可以更改默认行为;
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进行编码的一个缺点,但你需要注意迁移过程中的回归,尽管我们的目标是保持我们尽可能向后兼容。
答案 1 :(得分:4)
默认情况下,您可以在另一个输入中设置更简单的焦点。
<p:dialog id="dialog" header="Users" focus="savebtn" widgetVar="txtName">
如果您使用其他文件进行呼叫
<p:dialog id="dialog" header="Users" focus="savebtn" widgetVar="formRegUsers:txtName">
答案 2 :(得分:1)
解决此问题的另一个技巧:
我在对话框中添加了一个文本输入作为对话框的第一个输入:
<p:dialog id="myDialogId" widgetVar="myDialog"....
<p:inputText id="fixForFocusProblem"/>
<p:calendar ...
..
</p:dialog>
在显示对话框时,我称之为:
$('#myForm\\:fixForFocusProblem').show();
myDialog.show();
$('#myForm\\:fixForFocusProblem').hide();
通过这种方式,焦点会立即显示在输入文本上。
不太好但是它在没有视觉干扰的情况下起作用。
答案 3 :(得分:0)
这也可以:
<p:dialog onShow="$(document.activeElement).blur()" ...>
或Primefaces jQuery
<p:dialog onShow="jQuery(document.activeElement).blur()" ...>
答案 4 :(得分:0)
在.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();
}
}