在ENTER上提交搜索不在IE中工作

时间:2014-02-24 17:19:50

标签: xpages

执行全文搜索用户希望简单地将他们的查询输入到简单的inputText中。然后,只要他们按下ENTER,搜索本身就会启动。

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

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

这适用于Firefox和Chrome ,但不适用于IE ;显然IE没有将ENTER键识别为onchange - 触发器。

所以我尝试使用控件的onkeyup事件使用

之类的东西来记录和分析击键
var q=sessionScope.get("myQuery");
return q.charCodeAt(q.length-1);

适用于所有标准字符,但不适用于ENTER键(我希望接收代码13的位置)。

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

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

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

问题是:

  • 有没有办法捕获一个ENTER键,以便我们对它做出反应?
  • 或者我们可能在这里完全错误的轨道?

1 个答案:

答案 0 :(得分: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>