Comment désactiver focus pour la première entrée dans un dialogue Primefaces?

j'ai un dialogue dans ma Page, qui contient un champ d'entrée (Date, Calendrier) . Le problème c'est que le calendrier s'ouvre directement après l'ouverture de la boîte de dialogue, car l'accent est mis sur la première entrée.

y a-t-il un moyen de désactiver la mise au point dans les Primefaces?

10
demandé sur Tuan Dang 2013-04-02 14:02:13

5 réponses

Vous pouvez changer le comportement par défaut;

http://forum.primefaces.org/viewtopic.php?f=3&t=29050

vous pouvez toujours outrepasser les comportements par défaut des widgets, par exemple pour empêcher le calendrier de se concentrer sur l'ouverture du dialogue;

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();
  }
}

le code original est;

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

si vous mettez votre override après les ressources PrimeFaces, alors votre implémentation applyFocus sera récupérée et utilisée à la place.

je te suggère de créer un fichier js comme primefaces-remplacements.js et de mettre ce genre de choses à l'intérieur, un désavantage cependant, puisque vous êtes le codage contre le faible niveau de l'api, vous avez besoin pour regarder dehors pour les régressions pendant les migrations, bien que notre objectif est de garder la compatibilité descendante autant que nous le pouvons.

12
répondu Cagatay Civici 2016-02-01 12:04:15

quelque chose de plus simple pourrait être défini focus par défaut dans une autre entrée que vous avez.

<p:dialog id="dialog" header="Users" focus="savebtn" widgetVar="txtName">

si vous appelez d'un autre fichier

<p:dialog id="dialog" header="Users" focus="savebtn" widgetVar="formRegUsers:txtName">
2
répondu softiecode 2017-06-02 18:06:36

une Autre astuce pour résoudre ce problème:

j'ai ajouté une entrée de texte comme première entrée de la boîte de dialogue dans ma boîte de dialogue:

<p:dialog id="myDialogId" widgetVar="myDialog"....

  <p:inputText id="fixForFocusProblem"/>

  <p:calendar ...
  ..
</p:dialog>

Et lors de l'affichage de la boîte de dialogue, j'appelle cela:

$('#myForm\:fixForFocusProblem').show();
myDialog.show(); 
$('#myForm\:fixForFocusProblem').hide();

de cette façon, l'accent est mis sur le texte d'entrée qui devient immédiatement invisible.

pas si sympa mais ça marche sans déranger visuellement.

1
répondu Samuel 2013-11-25 16:24:08

Cela permettra également de faire:

<p:dialog onShow="$(document.activeElement).blur()" ...>