达到最大长度时,将焦点更改为下一个输入字段

时间:2012-03-28 15:03:15

标签: jsf focus richfaces

我希望在达到最大长度(即2)之后改变fechaI的焦点,并将焦点设置在mesI上。提前致谢并抱歉我的英语,而不是我的主要内容。

<h:form id:form>
...
<h:inputText id="fechaI" value="#{solicitud.fechaI}" maxlength="2" size="2">
<a4j:ajax event="change" render="fechaI"/> 
</h:inputText>

<h:inputText id="mesI" value="#{solicitud.mesI}" maxlength="2" size="2" >
<a4j:ajax event="change" render="mesI"/> 
</h:inputText>

<h:inputText id="anoI" value="#{solicitud.anoI}" maxlength="4" size="4" >
<a4j:ajax event="change" render="anoI"/> 
</h:inputText>
...
</h:form>

我的代码更新,仍无效:

<h:form id="form">
    <h:inputText id="fechaI" value="#{solicitud.fechaI}" maxlength="2" size="2" tabindex="1"/>
    <h:inputText id="mesI" value="#{solicitud.mesI}" maxlength="2" size="2" tabindex="2" />
    <h:inputText id="anoI" value="#{solicitud.anoI}" maxlength="4" size="4"  tabindex="3" />
</h:form>
<script type="text/javascript">
    //<![CDATA[
  $('input[maxlength][tabindex]').on('keyup', function() {
    $this = $(this);
    if ($this.val().length == $this.attr('maxlength')) {
        $('input[maxlength][tabindex=' + ($this.attr('tabindex') + 1) + ']').focus();
    }
  });
//]]>
</script>

2 个答案:

答案 0 :(得分:5)

您可以使用JavaScript和RichFaces的 #{rich:element} 表达式,如下所示。

    <h:form>
        <h:inputText id="fechaI" value="" maxlength="2" size="2" onkeyup="if(this.value.length >= this.getAttribute('maxlength')) {#{rich:element('mesI')}.focus()}"/>
        <h:inputText id="mesI" value="" maxlength="2" size="2" onkeyup="if(this.value.length >= this.getAttribute('maxlength')) {#{rich:element('anoI')}.focus()}"/>
        <h:inputText id="anoI" value="" maxlength="4" size="4"/>
    </h:form>

答案 1 :(得分:1)

没有JSF工具或组件。你需要一些JavaScript。

首先给输入tabindex以及

<h:inputText ... maxlength="2" tabindex="1" />
<h:inputText ... maxlength="2" tabindex="2" />
<h:inputText ... maxlength="4" tabindex="3" />

然后你可以通过在DOM ready

上执行这个jQuery的小镜头来实现它
$('input[maxlength][tabindex]').on('keyup', function() {
    var $this = $(this);
    if ($this.val().length == $this.attr('maxlength')) {
        $("input[maxlength][tabindex='" + (parseInt($this.attr('tabindex')) + 1) + "']").focus();
    }
});

如果您使用的是不包含jQuery 1.7.x的旧版RichFaces,请使用jQuery.live()代替jQuery.on()