强制Primefaces从javascript函数更新

时间:2018-03-29 10:27:05

标签: javascript html ajax primefaces

我有这个问题:

在页面加载时我添加了一个事件监听器' 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更新冲突。

提前致谢。

1 个答案:

答案 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的建议。