我有这个问题:
在页面加载时我添加了一个事件监听器' keypress'在页面中的每个输入组件上。我需要检查输入是否包含一些特殊字符并删除它们。
这是在页面加载时启动的功能:
function activateCharsCheck() {
var fields = document.querySelectorAll('input[type=text]');
if (fields) for (var i = 0; i < fields.length; i++) {
addEventListener('keypress', handleKeyPress);
}
}
这是与按键相关的功能:
function handleKeyPress(e) {
e.stopPropagation();
e.preventDefault();
var cp = e.charCode;
if (!cp) return
var c = String.fromCharCode(cp);
if (validChar(cp)){
insert(e.target, c);
// Here I need something to force update
} else {
PF('popupWarning').show();
}
}
这是输入类型的一个例子:
<p:inputText id="myText" value="#{myBBean.text}">
<p:ajax event="change" listener="#{myCBean.method()}" update="@form">
</p:inputText>
当我插入一个角色并触发该功能时,ajax更新不起作用。如果我刷新页面我会丢失内容,或者如果有关联的监听器,它就不会启动。即使是吸气剂和制定者也不会工作。
有什么建议吗? 我正在寻找一种强制ajax更新的方法,或者是否有其他方法可以做到这一点。
我认为问题是函数 insert(e.target,c); 修改内容并与ajax更新冲突。
提前致谢。
答案 0 :(得分:0)
问题是:
e.stopPropagation();
e.preventDefault();
阻止ajax更新。
这是解决方案:
function handleKeyPress(e) {
var cp = e.charCode;
if (!cp) return
var c = String.fromCharCode(cp);
if (!validChar(cp)){
e.stopPropagation();
e.preventDefault();
PF('popupWarning').show();
}
}
感谢@Kukeltje的建议。