PrimeFaces输入文本输入密钥

时间:2017-01-19 14:58:52

标签: jquery primefaces jsf-2

JSF 2.0,PrimeFaces 5.3

您好,我已经开发了一个导航控件(使用jquery),当您在表单的某个组件中按下回车键(输入文本,自动完成等)时,焦点会跳转到下一个组件,这样您就可以在不使用的情况下浏览老鼠。我的一个组件是输入文本区域,所以我需要用其他方式替换回车键来进行换行。我已经研究过并发现我可以使用下一个代码来捕获输入文本区域中的回车键。

<p:inputText id="commentInput" rendered="#{foo.rendered}" 
value="#{foo.value}"
onkeypress="if (event.keyCode == 13) { onchange(); return false; }">
<f:ajax event="change" listener="#{foo.test}" />

我的问题是,可以使用其他组合键在输入文本区域中产生换行符吗?也许 Alt + 输入键或类似。 此应用程序是其他桌面应用程序的端口,因此我需要复制该行为。

使用@DavidFlorez提出的解决方案进行更新

onkeyup="if (event.ctrlKey &amp;&amp; event.keyCode == 13) {this.value = this.value.slice(0, $(this).caret().begin)+'\n'+this.value.slice($(this).caret()‌​.begin);}"

当我开始在inputTextarea中写入时,我得到下一个错误:

参数列表

之后

未捕获的SyntaxError:missing)

我检查)但我看到所有人都在关闭。我按 CTRL + 输入键但没有任何反应。

1 个答案:

答案 0 :(得分:0)

使用@DavidFlorez解决方案我修改了我的代码:

<p:inputTextarea id="input" immediate="#{cc.attrs.inmediate}" value="#{cc.attrs.bean[cc.attrs.property]}" 
                tabindex="#{groupOfControl.getNextIndex(cc)}" maxlength="#{cc.attrs.maxLength}" 
                disabled="#{cc.attrs.disabled}" binding="#{cc.attrs.binding}" onkeyup="keyOverTextArea(event, '#{cc.clientId}Var')" 
                required="#{cc.attrs.require}" styleClass="#{cc.attrs.styleClass}" 
           rows="#{cc.attrs.row}" cols="#{cc.attrs.cols}" autoResize="#{cc.attrs.autoResize}" widgetVar="#{cc.clientId}Var"
           style="width:#{cc.attrs.width}%;resize:none">
        <composite:insertChildren />      
     </p:inputTextarea>

onkeyup属性调用jquery函数,我写了:

function keyOverTextArea(event, widgetVar){
    if(event.keyCode == 13 && event.ctrlKey){
        var component = $(document.getElementById(PF(widgetVar).id));
        component.val(component.val().slice(0, component.caret().begin)+'\n'+component.val().slice(component.caret().begin));
        return false;
    }

    if ((event.which == 9 && !event.shiftKey) || event.which == 13){
        var idNextComponent = findComponent.findIdNextComponent(PF(widgetVar).id, null, true);
        PrimeFaces.focus(idNextComponente);
    }
}