【问题标题】:Catch key pressed ajax event without input fields在没有输入字段的情况下捕获按键按下的 ajax 事件
【发布时间】:2014-10-26 13:25:15
【问题描述】:

在合作伙伴管理中,当输入合作伙伴编号或名称时,会显示合作伙伴信息和照片,并隐藏用于介绍合作伙伴编号或名称的文本。

然后我想在按下 ESC 或 ENTER 键时在我的支持 bean 中执行一个方法

我在视图中使用以下 javascript 捕获 keyup 事件:

<script type="text/javascript">
    $(document).bind('keyup', function(e) {
        debugger;
        if (arguments[0].key == 'Esc') {
            alert("YEAH");
           }
    });
</script>

如何调用我的支持 bean 方法???

public void listener() {
    switch (keyCode) {
    case(27):
       // switch boolean attribute in bean to render view hidden panel  
    }
}

我尝试过使用远程命令或 ajax 监听器:

<p:remoteCommand name="remote" actionListener="#{registerVisitBean.listener}" update="input_table"/>


<f:ajax event="keyup" execute="@this keyCode" listener="#{registerVisitBean.listener}" update="input_table" />
<h:inputHidden id="keyCode" binding="#{keyCode}" value="#{registerVisitBean.keyCode}" />    

选择输入文本时,这两种方法都会捕获键盘,但是当我隐藏它以显示伙伴信息时,侦听器停止工作。

有什么想法吗?

谢谢! J

【问题讨论】:

    标签: java javascript ajax jsf


    【解决方案1】:
    <script type="text/javascript">
        $(document).bind('keyup', function(e) {
            debugger;
            if (arguments[0].key == 'Esc') {
                alert("YEAH");
                // suppose you want to call your listener here
                remote([{name: 'key', value: arguments[0].key}]);
               }
        });
    </script>
    
    <p:remoteCommand name="remote" actionListener="#{registerVisitBean.listener}" update="input_table"/>
    
    
    public void listener() {
       Map<String, String> params = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();
       String keyCode = params.get("key");
    
       // your code     
    }
    

    【讨论】:

    • 效果很好,现在我必须弄清楚如何正确处理 enter 和 esc 事件!谢谢!
    猜你喜欢
    • 2012-04-26
    • 1970-01-01
    • 2013-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-10
    • 2012-02-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多