我有一个inputText字段,旁边有一个验证按钮。单击“验证”按钮时,它会执行一些后端验证,并在按钮旁边显示绿色复选标记。我希望绿色复选标记在值更改时消失,并且在失去焦点时立即消失,因为页面上有一个测试按钮,我也在有效时禁用/启用。所以event =“blur”或者even =“change”将不起作用,因为他们可以在输入文本字段更改时单击该按钮。我使用了keyup,效果很好,但是箭头键和标签等...触发事件,我不想要它们。
<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标签一起使用的选项。
答案 0 :(得分:1)
从我在这里看到的内容: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>
答案 1 :(得分:1)
因此,使用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代码。我不想要很多键来触发更改,例如箭头键,标签,输入,主页,结尾等......
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;
}
}
答案 2 :(得分:0)
我发现了一个更简单的解决方案,只需将无效键数组作为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
函数。