Javascript 设置循环中输入文本的焦点
我需要将焦点设置为h:inputText,它位于如下组件中:Javascript 设置循环中输入文本的焦点,javascript,jsf-2,focus,Javascript,Jsf 2,Focus,我需要将焦点设置为h:inputText,它位于如下组件中: <h:panelGroup id="bidView"> <h:panelGroup rendered="#{some conditions}"> <h:outputText> Some text</h:outputText> <p:
<h:panelGroup id="bidView">
<h:panelGroup rendered="#{some conditions}">
<h:outputText>
Some text</h:outputText>
<p:inputText id="amountInput" value="#{bean.bidAmount}" />
<h:commandButton value="Submit">
<f:ajax listener="#{bean.submit(item)}" execute="@form" render="bidView "/>
</h:commandButton>
</h:panelGroup>
<script>document.getElementById('amountInput').focus()</script>
</h:panelGroup>
一些文本
document.getElementById('amountInput').focus()
需要获得焦点的输入文本是“amountInput”
<script>document.getElementById('amountInput').focus()
document.getElementById('amountInput').focus()
但它会生成以下错误:“Cannon调用null的方法‘focus’”。我缺少什么
(我应该补充一点,当用户单击表中每一行旁边的提交按钮时,会呈现bidView。它,bidView,然后显示在单击的行下,允许用户输入一个数字并让服务器处理。)文档。getElementById()需要生成的HTML客户端ID,不是JSF组件ID。您需要在浏览器中打开该页面,右键单击并查看源代码以自己查看。找到
的生成HTML
元素,并准确使用其id
。此ID前面带有每个父级NamingContainer
组件的组件ID,例如
、
、
等
你好像在用素面。您可以使用p:component()
EL函数打印给定组件ID的客户端ID
<script>document.getElementById("#{p:component('amountInput')}").focus()</script>
回到PrimeFaces,你知道吗?你也可以用它
<h:panelGroup id="bidView">
<p:focus context="bidView" />
...
</h:panelGroup>
...
document.getElementById()需要生成的HTML客户端ID,而不是JSF组件ID。您需要在浏览器中打开该页面,右键单击并查看源代码以自己查看。找到
的生成HTML
元素,并准确使用其id
。此ID前面带有每个父级NamingContainer
组件的组件ID,例如
、
、
等
你好像在用素面。您可以使用p:component()
EL函数打印给定组件ID的客户端ID
<script>document.getElementById("#{p:component('amountInput')}").focus()</script>
回到PrimeFaces,你知道吗?你也可以用它
<h:panelGroup id="bidView">
<p:focus context="bidView" />
...
</h:panelGroup>
...
您的bidView是否由
包装?如果是,很可能所有组件的ID中都有该后缀。例:。你能检查firebug并确保客户端id是完整的吗?是的,它被包装在一个表单中。我给了它一个id“theform”,我试图使用form:j_id_2l:19:bidView:amountInput(j_id_21也附加到每个组件,19表示循环中的位置)访问组件,但它仍然为空。这是一个正确的方法,去尝试所有的组件吗?难道JSF不知道如何找到命名组件吗?这很奇怪document.getElementById('theform:j_id_2l:19:bidView:amountInput')。focus()
应该可以工作。最后,这是一个非常有效的方法。关于另一个问题,每个组件库都有自己的客户端javascript API。由于您使用的是primefaces,我建议您使用他们的客户端API,这可能允许您访问没有前缀的组件(我不能肯定地告诉您,因为我没有使用primefaces),您提到了一个循环。这是否意味着每行都有一个bidView实例?因为如果是这样的话,你就不能硬编码了19@Nikhil:
不是NamingContainer
,因此bidView
肯定不会出现在输入组件的客户端ID中。您的bidView是否由
包装?如果是,很可能所有组件的ID中都有该后缀。例:。你能检查firebug并确保客户端id是完整的吗?是的,它被包装在一个表单中。我给了它一个id“theform”,我试图使用form:j_id_2l:19:bidView:amountInput(j_id_21也附加到每个组件,19表示循环中的位置)访问组件,但它仍然为空。这是一个正确的方法,去尝试所有的组件吗?难道JSF不知道如何找到命名组件吗?这很奇怪document.getElementById('theform:j_id_2l:19:bidView:amountInput')。focus()
应该可以工作。最后,这是一个非常有效的方法。关于另一个问题,每个组件库都有自己的客户端javascript API。由于您使用的是primefaces,我建议您使用他们的客户端API,这可能允许您访问没有前缀的组件(我不能肯定地告诉您,因为我没有使用primefaces),您提到了一个循环。这是否意味着每行都有一个bidView实例?因为如果是这样的话,你就不能硬编码了19@Nikhil:
不是NamingContainer
,因此bidView
肯定不会出现在输入组件的客户机ID中。谢谢您,BalusC。getElementById(“#{p:component('amountInput')}”).focus()适合我。我知道JSF2太优雅了,不能没有这样的东西。你也可以使用PrimeFaces Javascript API:PrimeFaces.focus(id,context)
谢谢你,BalusC。getElementById(“#{p:component('amountInput')}”).focus()适合我。我知道JSF2太优雅了,不能没有这样的东西。你也可以使用PrimeFaces Javascript API:PrimeFaces.focus(id,context)