繁体   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