2016-01-05 36 views
0

當使用JSF inputText通過ajax事件調用javascript函數事件keydown但沒有得到keu代碼事件down。獲得調用函數的關鍵代碼JSF

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

與jQuery第一inputText工作和在管線11的JavaScript功能,但第二inputText不使用JSF AJAX工作。

+0

我認爲這僅僅是名稱的說法,而不是不同的就是我們所說的這一點。 – Jeus

+0

有沒有辦法從outputText獲取keycode? – Jeus

+0

我din't通知,你說,如果從'data'改變參數'Event'問題就解決了? – Jeus

回答

0

您收到的數據是事件 - 它包含event.type,event.status,event.source。這就是爲什麼它不適合你。

您可以捕獲事件keydown,但在源代碼中,您只能找到HTMLInputelement - 調用該事件的inputText元素 - 而非密鑰。

如果你真的需要知道被按下哪個鍵,然後用你的jQuery版本,如果你需要POST請求到後端,並得到一些字段更新,然後使用JSF AJAX。順便說一句,你正在將primefaces組件與jsf ajax混合 - 不要那樣做(它不一樣) - 如果你願意,可以使用primefaces ajax。

工作版本(只是DIFF)

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"/>