簡體   English   中英

primefaces jsf p:ajax事件鍵盤忽略箭頭鍵

[英]primefaces jsf p:ajax event keyup ignore arrow keys

我有一個inputText字段,旁邊有一個驗證按鈕。 當您單擊驗證按鈕時,它會進行一些后端驗證,並且按鈕旁邊會出現一個綠色的復選標記。 我希望該綠色的復選標記在值更改時消失,而在失去焦點時立即消失,因為頁面上有一個測試按鈕,在有效時我也會禁用/啟用。 因此event =“ blur”或什至=“ change”將不起作用,因為當輸入文本字段更改時,他們可以單擊按鈕。 我使用了keyup,效果很好,但是箭頭鍵和Tab等觸發事件,但我不希望它們觸發。

<h:inputText id="baseURL" style="width:425px;" value="#{View.baseURL}">
    <p:ajax event="keyup" update="validIcon :addEditCatalogForm:testUrlButton" listener="#{View.resetValidation()}"/>
</h:inputText>    

我看到了用於此的JQuery選項,但是我需要一個可與jsf和primefaces標記一起使用的選項。

從我在這里看到的內容: http : //forum.primefaces.org/viewtopic.php?f=3&t=24788

解決方案將接近:

<h:inputText id="baseURL" style="width:425px;" value="#{View.baseURL}" onkeyup="if (event.keyCode != ####_YOUR_KEYS_####) return false;">
    <p:ajax event="keyup" execute="@this keyCode" update="validIcon :addEditCatalogForm:testUrlButton" listener="#{View.resetValidation()}"/>
</h:inputText>    

因此,使用Thrax的答案,我使用了后端。 我認為此解決方案比較麻煩,我希望有一種更清潔的方法可以解決此問題,因此,如果其他人有更好的解決方案,請告訴我。

這是代碼:

  <h:inputText id="baseURL" style="width:425px;" value="#{bean.valueYouAreChanging}" onkeyup="document.getElementById('#{keyCode.clientId}').value=event.keyCode">
        <p:ajax event="keyup" process="@this keyCode" update="validIcon :form:testUrlButtonPost" listener="#{bean.resetValidation}"/>
  </h:inputText>
  <h:inputHidden id="keyCode" binding="#{keyCode}" value="#{bean.keyCode}" />

這是bean代碼。 我不希望有很多按鍵來觸發更改,例如箭頭鍵,Tab,Enter,Home,End等。

public void resetValidation() {

    String[] invalidKeys = {"9","13","16","17","18","19","20","33","34","35","36","37","38","39","40","45","224"};
    List<String> keys = new ArrayList<>();
    for(String key : invalidKeys) {
        keys.add(key);
    }
    if(!keys.contains(keyCode)) {
        validBaseURL = false;
    }
}

通過將無效鍵的數組作為JS數組字符串返回,我找到了一個更簡單的解決方案:

public String getInvalidKeysJSArray() {
    return "[9, 13, 16, 17, 18, 19, 20, 33, 34, 35, 36, 37, 38, 39, 40, 45, 224]";
}

然后在您的輸入組件中, onkeyup參數看起來像

onkeyup="return '#{keyUtilsController.invalidKeysJSArray}'.indexOf(event.keyCode) &lt; 0;"

請注意,IE Array原型可能不包含indeoxOf函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM