2013-04-02 8 views
10

Mam okno dialogowe na mojej stronie, które zawiera pole wejściowe (data, kalendarz). Problem polega na tym, że kalendarz otwiera się bezpośrednio po otwarciu okna dialogowego, ponieważ fokus jest ustawiony na pierwszym wejściu.Jak wyłączyć fokus dla pierwszego wejścia w oknie PrimFaces?

Czy istnieje sposób wyłączenia fokusa w obszarach wstępnych?

+2

można po prostu ustawić kolejność tabulatora do innej dziedzinie, tak aby inna dziedzina ma skupić? –

+0

jest tylko jeden inputField :( – Johnny2012

Odpowiedz

11

Możesz zmienić domyślne zachowanie;

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

Zawsze można przesłonić domyślne zachowania wzory, na przykład w celu zapobieżenia ostrość kalendarza na otwarciu dialogowym;

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

oryginalny kod to;

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

Jeśli umieścisz przesłonę po zasobach PrimeFaces, wówczas zostanie zastosowana implementacja applyFocus.

Proponuję utworzyć plik js, jak np. Primefaces-overrides.js i umieścić w nim takie rzeczy, jedną wadę, ponieważ kodujesz na niskim poziomie apis, musisz uważać na regresje podczas migracji, chociaż staramy się zachowaj zgodność wstecz tak dużo, jak tylko możemy.

+0

, gdy wiele selektorów, jak rozwiązać ten sam problem, działa dobrze na jednym selektorze daty @CagatayCivici –

1

Kolejny trik, aby rozwiązać ten problem:

Dodałem wprowadzania tekstu jako pierwszego wejścia okna w moim oknie:

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

    <p:inputText id="fixForFocusProblem"/> 

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

A kiedy pokazywania okna Ja nazywam to:

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

W ten sposób fokus staje się tekstem wejściowym, który staje się natychmiast niewidoczny.

Nie tak ładne, ale działa bez wizualnie niepokojące.

0

Będzie to również zrobić:

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

Or Primefaces jQuery

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

dodać ten skrypt w .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(); 
     } 
    } 
+0

Co tu jest inaczej w porównaniu z kodem w zaakceptowanej odpowiedzi? – Kukeltje

2

Coś prostsze można ustawić ostrości domyślnie inne wejście, które masz.

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

Jeśli dzwonisz z innego pliku

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

Ostrość może być również ustawiona do komponentu formularza. – unleashed

Powiązane problemy