Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 设置循环中输入文本的焦点_Javascript_Jsf 2_Focus - Fatal编程技术网

Javascript 设置循环中输入文本的焦点

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:inputText,它位于如下组件中:

    <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)