在IE中无法在ENTER上提交搜索

Lot*_*ler 2 xpages

要执行全文搜索,用户只需要在简单的inputText中输入查询即可。然后,一旦他们按ENTER键,搜索本身就会开始。

目前,我们试图像这样解决它:

  • inputText绑定到sessionScope变量 myQuery
  • 输入还具有绑定到其的OpenPage操作 onchange事件
  • 将要打开的页面包含一个viewPanel以及一个绑定到我们的sessionScope变量的搜索过滤器,以及更多的FT过滤字段。

在Firefox和Chrome中可以正常工作,但在IE中不能正常工作 ; 显然,IE无法将ENTER键识别为onchange-trigger。

因此,我尝试使用控件的onkeyup事件记录和分析击键,例如

var q=sessionScope.get("myQuery");
return q.charCodeAt(q.length-1);
Run Code Online (Sandbox Code Playgroud)

适用于所有标准字符,但不适用于ENTER键(我原本希望在其中收到代码13)。

我目前确实在控件的onkeyup事件中使用CSJS代码有某种解决方法,如下所示:

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

但这有一些副作用,有可能使事情变得更复杂,并且感觉有点像黑客。因此,我更愿意使用服务器端脚本来解决它。

问题是:

  • 有没有一种方法可以捕获ENTER键击,以便我们对其做出反应?
  • 还是我们在这里走错了路?

Bri*_*IBM 5

在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>
Run Code Online (Sandbox Code Playgroud)