2012-08-06 63 views
0

我遇到了一個奇怪的問題,不知道它是否是一個錯誤。基本上,如果當前通過ajax更新下一個焦點,焦點將跳過下一個焦點。primefaces 3.2 - 無法自動對焦下一個字段

要複製的問題,您可以使用以下豆:

public class TestBean implements Serializable { 
    private BigDecimal a; 
    private BigDecimal b; 
    private BigDecimal c; 
    // 
    public TestBean() { 
    } 
    public BigDecimal getA() { 
     return a; 
    } 
    public void setA(BigDecimal a) { 
     this.a = a; 
    } 
    public BigDecimal getB() { 
     return b; 
    } 
    public void setB(BigDecimal b) { 
     this.b = b; 
    } 
    public BigDecimal getC() { 
     return c; 
    } 
    public void setC(BigDecimal c) { 
     this.c = c; 
     this.calculate(); 
    } 
    public void calculate() { 
     if (a != null && b != null) 
     c = a.multiply(b); 
    } 
} 

及以下的XHTML

<p:inputText id="a" value="#{testBean.a}" style="text-align:right"> 
    <p:ajax event="blur" listener="#{testBean.calculate}" update="c d"/> 
</p:inputText> 
<p:inputText id="b" value="#{testBean.b}" style="text-align:right"> 
    <p:ajax event="blur" listener="#{testBean.calculate}" update="c d"/> 
</p:inputText> 
<p:inputText id="c" value="#{testBean.c}" style="text-align:right"> 
</p:inputText> 
<p:inputText id="d" value="#{testBean.c}"/> 
  1. 首先,我將點擊字段id =「一個「,id =」a「將會獲得重點,我會輸入一些價值。這裏沒問題。
  2. 然後,我將按Tab鍵將光標移動到下一個字段,id =「b」,並鍵入一些值。這裏沒問題。
  3. 然後我再次按Tab鍵,期待光標移動下一個字段,id =「c」。但它沒有發生。只更新字段id =「c」的值,焦點在某處丟失。當焦點丟失時,如果我再次按Tab鍵,焦點將移動到id =「a」(或第一個字段)。
  4. 即使我不使用Tab鍵,而是使用鼠標點擊代替,如果我現在在字段id =「b」,並點擊id =「c」,焦點也將丟失。
  5. 如果我從字段id =「b」更新中刪除「c」,使其更新=「d」,然後焦點將停留在字段id =「c」,但問題是,它沒有得到更新爲「c」的計算值。

總之,我相信我可以說,如果當前字段通過update =「nextfield」運行更新下一個字段的ajax事件,那麼下一個字段不能通過tab鍵或下一個字段進行聚焦鼠標點擊。第二次點擊鼠標將把焦點帶到下一個領域,但這很乏味。但是,我可以更新緊接着的下一個字段後面的所有字段,並且仍然將焦點正確地停留在緊接着的下一個字段上。

這是應該的方式嗎?在這種情況下,如何將焦點帶到下一個領域?

(PrimeFaces 3.2)

回答

0

update發生時,HTML是續期cd,所以光標不能集中在這些元件上。 不確定你想使用一些事件後JavaScript來設置焦點或只是接受這種行爲。

+0

我嘗試過不完整,但它干擾了ajaxstatus的未完成...感謝回覆,但... – snlm95 2012-08-06 04:06:35