Primefaces: Por que jQuery não encontra meu elemento pelo id?

6 respostas
M

Colegas,

O xhtml abaixo é uma simplificação do problema que não estou conseguindo resolver:
Preciso abrir um e no oncomplete do mesmo preciso setar o foco em .
Acontece que se eu coloco o dentro de um eu não sei a sintaxe
do jQuery('#teste').focus() para setar o foco no elemento testeForm:teste
Vc pode me dizer a sintaxe par o jQuery colocar o foco no testeForm:teste?

Muito obrigado,
Marques

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:ui="http://java.sun.com/jsf/facelets"
	xmlns:p="http://primefaces.org/ui"
	xmlns:pe="http://primefaces.org/ui/extensions">

<h:head></h:head>
<body>
	<p:commandButton id="showDialogButton" type="button" value="Show"
		onclick="dlg.show()" />

	<p:dialog header="" widgetVar="dlg" resizable="false">
		<h:form id="form">

			<p:commandButton id="submitButton" value="Submit" update=":display"
				oncomplete="dlg.hide(); jQuery('#teste').focus()" />

		</h:form>
	</p:dialog>

	
	<p:outputPanel id="display" style="display:block;margin-top:10px;">
		<h:outputText id="name" value="Hello: " />
		<p:inputText id="teste" />
	</p:outputPanel>
	
</body>
</html>

6 Respostas

R

Faz assim:

jQuery('#form:\\teste').focus();

Se não funfar ta dando conflito com o JQuery e o prime, ponha no seu :

<h:outputScript library="primefaces" name="jquery/jquery.js" />

E remova caso tenha essa declaração:

<script type="text/javascript" src="js/jquery-anyversion.js"></script>
M

Rafael,

Fiz exatamente como vc sugeriu, porém não funcionou.
Alguma ideia?

Obrigado,

Marques

D

Boa noite,

Por padrão o h: form concatena os id dos componentes internos com o id do form , mas tem uma forma de desativar isso , no form seta o atributo prependId do forme com = a false que seu jquery vai funcionar buscando apenas com o id do componente como vc ja estava fazendo no inicio

M

Danilo,

Funcionou!
Muito obrigado!

D

opa, uma mão lava a outra

edita o seu primeiro post e coloca a tag [RESOLVIDO] no titulo

R

Foi mal não deu pra responder antes,

Não sabia essa do prependeId, boa.

Mas tbm acho que da pra fazer assim:

prependId = false

document.getElementById('teste').focus();

prependId = true

document.getElementById('form:teste').focus();
Criado 12 de janeiro de 2013
Ultima resposta 13 de jan. de 2013
Respostas 6
Participantes 3