当使用JSF inputText
通过ajax事件keydown调用javascript函数但没有得到keu的代码事件时。
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
xmlns:p="http://primefaces.org/ui"
xmlns:f="http://java.sun.com/jsf/core">
<h:head>
<title>Start Page</title>
<script>
i = 0;
$(document).ready(function (e) {
$("#form\\:inp1").keydown(function (e) {
$("#form\\:span1").text(e.type + ": " + e.which);
});
});
function keyUp1(e, extraval)
{
$("#form\\:span2").text(e.type + ": " + e.which);
window.alert("call it" + extraval);
}
</script>
</h:head>
<body>
<h:form id="form">
JQuery:
<p:inputText id="inp1" />
<p:outputLabel id="span1" value="Test This"/>
<br/>
<br/>
<h:outputText value="JSF Ajax: " />
<p:inputText id="counter" value="#{listenerView.text}">
<f:ajax event="keydown" onevent="function(data) {keyUp1(data,' Test it')};"/>
</p:inputText>
<h:outputText id="out" value="#{listenerView.text}"/>
<p:outputLabel id="span2" value="Test This"/>
</h:form>
</body>
第一个inputText
使用第11行中的Jquery和javascript函数,但第二个inputText
不适用于JSF ajax。
答案 0 :(得分:0)
您收到的数据是事件 - 它包含event.type,event.status,event.source。这就是为什么它不适合你。
你可以捕获事件keydown但是在源代码中你只会找到HTMLInputelement - 调用事件的inputText元素 - 而不是密钥。
如果你真的需要知道按下了什么键,那么使用你的jQuery版本,如果你需要向后端发布请求并获得一些字段更新,那么使用jsf ajax。顺便说一句,你将primefaces组件与jsf ajax混合 - 不要这样做(它不一样) - 如果你愿意,可以使用primefaces ajax。
工作版(只是差异)
function keyUp1(e)
{
if (e.status !== "complete") {
console.log(e.type + ": " + Object.keys(e));
console.log("type: " + e.type);
console.log("status: " + e.status);
console.log("source: " + e.source);
}
}
<f:ajax event="keydown" onevent="keyUp1"/>