如何在Primefaces对话框中禁用第一个输入的焦点?

Joh*_*012 10 jsf dialog focus primefaces

我的页面中有一个对话框,其中包含一个输入字段(日期,日历).问题是打开对话框后日历会立即打开,因为焦点是在第一个输入上设置的.

有没有办法在Primefaces中禁用焦点?

Cag*_*ici 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();
  }
}
Run Code Online (Sandbox Code Playgroud)

原始代码是;

PrimeFaces.widget.Dialog.prototype.applyFocus = function() {
  this.jq.find(':not(:submit):not(:button):input:visible:enabled:first').focus();
}
Run Code Online (Sandbox Code Playgroud)

如果您在PrimeFaces资源之后放置覆盖,那么将拾取并使用您的applyFocus实现.

我建议创建一个像primefaces-overrides.js这样的js文件并把这样的东西放在里面,虽然因为你是针对低级api进行编码的一个缺点,但是你需要注意迁移期间的回归,尽管我们的目标是保持向后兼容性.尽我们所能.


小智 7

默认情况下,可以在您拥有的另一个输入中设置更简单的焦点。

<p:dialog id="dialog" header="Users" focus="savebtn" widgetVar="txtName">
Run Code Online (Sandbox Code Playgroud)

如果您从另一个文件调用

<p:dialog id="dialog" header="Users" focus="savebtn" widgetVar="formRegUsers:txtName">
Run Code Online (Sandbox Code Playgroud)