要执行全文搜索,用户只需将查询输入到简单的输入文本中。然后,一旦他们按下 ENTER 键,搜索本身就会开始。
目前我们尝试这样解决:
- inputText 绑定到 sessionScope 变量
myQuery
- 输入还有一个与其绑定的 OpenPage 操作
onchange
event
- 要打开的页面包含一个 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 按键以便我们对其做出反应?
- 或者我们可能走在完全错误的轨道上?
在 IE 中onchange
直到输入失去焦点后才会触发事件:http://komlenic.com/231/internet-explorer-onchange-on-enter/ http://komlenic.com/231/internet-explorer-onchange-on-enter/
因此,您可以使用一些 CSJS 来捕获 IE 中的 ENTER 按下,并使用以下命令从输入中删除焦点.blur()
方法,这将依次触发onchange
event
我尝试过的一个似乎有效的简单示例:
<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>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)