![](/img/trans.png)
[英]p:ajax blur event not triggered at first time primefaces jsf 2
[英]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) < 0;"
请注意,IE Array
原型可能不包含indeoxOf
函数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.