2014-02-24 32 views
1

執行全文搜索用戶希望簡單地將他們的查詢輸入到一個簡單的inputText中。然後,儘快爲他們擊中進入搜索本身應該在踢提交搜索在ENTER中不工作在IE

目前,我們試圖解決這樣的:

  • 的inputText的綁定到sessionScope變量,myQuery
  • 輸入也有一個OpenPage操作綁定到它的onchange事件
  • 要打開的頁面包含一個viewPanel,其搜索過濾器綁定到我們的sessionScope變量以及一些更多的FT過濾字段。

這在Firefox和Chrome中運行正常但不在IE;顯然,IE不能識別ENTER鍵作爲onchange-觸發器。

於是,我就記錄和分析使用控件的onkeyup事件使用的東西擊鍵像

var q=sessionScope.get("myQuery"); 
return q.charCodeAt(q.length-1); 

工作正常,所有標準字符,而不是ENTER鍵(如果我沒有料想到會收到代碼13)。

我現在確實有使用CSJS代碼控制的onkeyup事件某種變通方法爲:

if(event.keyCode===13){ 
    var p=location.pathname.split("/"); 
    p.pop(); 
    location.replace(p.join("/") + "/search.xsp"); 
} 

但是這有一定的副作用,有一定的潛力,使事情變得更加複雜,而且感覺有點像黑客。所以我寧願使用服務器端腳本解決它。

的問題是:

  • 有沒有辦法來捕獲ENTER鍵擊,使我們可以對其做出反應?
  • 或者我們可能在這裏完全錯誤的軌道?
+1

也許這個網站可以幫助你http://stackoverflow.com/questions/9145536/xpages-onkeypress-event-not-trigerring-click-properly – adminfd

回答

4

在IE則不觸發onchange事件,直到輸入失去焦點:http://komlenic.com/231/internet-explorer-onchange-on-enter/

所以,你可以使用一些CSJS趕上IE的ENTER按,然後使用.blur()方法從輸入降焦點,這將依次觸發onchange事件

一個簡單的例子我嘗試了,似乎工作:

<xp:inputText id="inputText2" value="#{document1.text1}"> 
    <xp:eventHandler event="onkeyup" submit="false"> 
     <xp:this.script><![CDATA[ 
      var kc = thisEvent.keyCode?thisEvent.keyCode:""; 
      if(kc != "" && kc == "13") { 
       var input = dojo.byId("#{id:inputText2}"); 
       input.blur(); 
      }]]> 
     </xp:this.script> 
    </xp:eventHandler> 
    <xp:eventHandler event="onchange" submit="true" refreshMode="complete"> 
     <xp:this.action> 
      <xp:openPage name="/formInput.xsp"></xp:openPage> 
     </xp:this.action> 
    </xp:eventHandler> 
</xp:inputText> 
+0

很好的解釋,非常感謝 –