我有与下面的primefaces示例完全相同的对话框格式设置。当我将光标放在下面的primefaces示例中的p:inputText并按下Enter键时,窗口会自动关闭。在我的例子中,我甚至删除了所有链接/按钮等,只有一个表单和一个输入,它仍然关闭输入时对话框。有什么方法吗?
http://www.primefaces.org/showcase/ui/dialogForm.jsf
mycode的:
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.prime.com.tr/ui"
xmlns:dc="http://dc.dreamcatcher.com/facelet-taglib">
<ui:composition template="#{layoutBean.registeredTemplate}">
<ui:define name="content">
<h:form id="dreamModifyFrm">
<p:commandLink onclick="webSearchDlg.show();" value="open"/>
<p:dialog header="#{bundle['dreamSearch.HEADER']}"
widgetVar="webSearchDlg" modal="true" styleClass="dialog dialog2"
draggable="false" resizable="false" showEffect="fade" position="top"
hideEffect="fade">
<p:inputText id="searchText" value="#{dreamSearchBean.searchText}"/>
</p:dialog>
</h:form>
</ui:define>
</ui:composition>
</html>
答案 0 :(得分:3)
我的问题使用以下方法修复: IE中有一个“功能”,如果你在表单中只有一个输入元素,那么在输入元素中聚焦时按Enter键会导致表单提交(无论你是否有提交按钮)。防止这种情况的一种方法是添加第二个输入元素,其中style =“display:none;”。
答案 1 :(得分:1)
使用一点JavaScript将以下onkeyup
attrubute添加到<h:form>
或<h:inputText>
元素,以防止在输入时按默认操作。
onkeyup="return event.keyCode != 13"
回车键的密钥代码为13,因此当按下时,上面的代码将返回false
,因此元素的默认操作将被阻止。
答案 2 :(得分:1)
让我从2013年的角度总结一下:
使用较新的PrimeFaces(3.2 +?)版本时,您也可以使用
<p:defaultCommand target="search-button" />
如下所述:
http://blog.primefaces.org/?p=1787
ShowCase链接:
http://www.primefaces.org/showcase-labs/ui/defaultCommand.jsf
当然,此标记必须直接位于h:form标记下方,否则标记无效。
不使用PrimeFaces时,您必须拥有类似
的内容<h:inputText style="display: none;" />
在表单上,如前面的回答c12所述。
上述两种情况都会导致 IE浏览器表现得像FF,Chrome等。完全不使用IE时,BalusC的解决方案就足够了。
答案 3 :(得分:-1)
我遇到了同样的问题。我有一个带有几十个InputTexts和几个按钮的From。当我在inputText中按下'enter'时,第一个按钮被触发而不是提交按钮。
上面的提示(onkeyup="return event.keyCode != 13"
和p:commandButton
与display:none
)对我不起作用。
我的解决方案非常简单且有效。只需让您的提交按钮成为HTML代码中的第一个按钮即可。 Button的正确布局/排列可以通过CSS完成,即"float: left;"
示例:
<p:commandButton value="Save" ajax="true"
icon="ui-icon-disk"
update="myTable"
actionListener="#{myTableBean.save()}" />
<p:commandButton id="previousPeriod" update="myTable"
icon="ui-icon-triangle-1-w" ajax="true" type="push"
style="float: left;"
actionListener="#{myTableBean.scrollPrevious}"
value="Previous" />
将我的Save-Button放在我的“Previous”-Button之后,一切正常!在inputText中按“enter”后,表单立即被提交,"float:left"
将Prev-Button放在可视化布局中的Save-Button之前。