使用调用函数JSF获取关键代码

get key code with call function JSF

本文关键字:代码 获取 JSF 调用 函数      更新时间:2023-09-26

当使用JSF inputText时,通过ajax事件keydown调用javascript函数,但不获取keu down的代码事件。

<?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。

您接收的数据是event-它包含event.type、event.status、event.source。这就是它不适用于您的原因。

您可以捕获事件keydown,但在源代码u中,您只能找到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"/>