如何在dataTable中设置inputText的焦点

时间:2014-01-07 15:45:47

标签: javascript jquery jsf primefaces

下午好,

使用JSF + Primefaces。 我有一个带有inputText字段的dataTable,它执行一个listner,当你结束函数或按Tab键时,焦点就是输入同一组件的低行。

用Google搜索了一些东西,似乎要用JavaScript或jQuery完成,但我知之甚少。

组件的clientId似乎有一些形式:dataTable:0:input,以及操作焦点的数字“0”。 任何人都知道如何在dataTable中处理组件的重点?

谢谢。

2 个答案:

答案 0 :(得分:2)

为您的组件添加适当的动态ID,然后您可以非常轻松地识别您的元素。

请考虑以下代码段:

<ice:form id="form1"/>
    <ice:dataTable id="dataTable1">
        ...
        <ice:inputText id="inputText1"  />
        <ice:commandButton id="commandButton1" value="Set Focus" onclick="javascript: setFocusOfInput(this);" />
        ...
    </ice:dataTable>
</ice:form>

和javascript部分:

function setFocusOfInput(obj){
    var objectId = obj.id;
    var requiredIndex  = objectId.indexOf(':commandButton1');
    var formId = objectId.substring(0, requiredIndex); 

    alert(formId); /* You will get your form id here, no-matter if you don't set. */

    /* Now you can get your required element and do-whatever you want. */
    var inputText1 = document.getElementById(formId +':inputText1');
    inputText1.focus();
}

只需为元素添加适当的ID即可将其与其他元素区分开来。

答案 1 :(得分:2)

您可以使用PrimeFaces元素<p:focus />,并在“context”属性中输入dataTable的ID。 “context”属性用于设置根组件以启动第一个输入搜索,因此如果您使用AJAX,则可以更新包含“dataTable”和“focus”元素的容器,以及dataTable中的第一个输入将在AJAX召集之后收到焦点:

<p:focus context="dataTable" />

如果要直接引用输入,也可以使用“for”属性:

<p:focus for="inputText" />

查看PrimeFaces文档:p:focus