Seam / JSF Form Submit-Button Onclick-Ereignis feuern
Frage
Ich habe ein Suchformular mit einem Query Builder. Der Builder wird durch eine Taste aktiviert. So etwas wie diese
<h:form id="search_form">
<h:outputLabel for="expression" value="Expression"/>
<h:inputText id="expression" required="true" value="#{searcher.expression}"/>
<button onclick="openBuilder(); return false;">Open Builder</button>
<h:commandButton value="Search" action="#{searcher.search}"/>
</h:form>
Das Ergebnis ist HTML, die sowohl eine <button/>
und eine <input type="submit"/>
in Form aufweist. Wenn der Benutzer eine Zeichenfolge in das Ausdrucksfeld betritt und trifft die Enter-Taste, anstatt den Absenden-Button klicken, wird der Query Builder angezeigt, wenn das erwartete Verhalten ist, dass die Suche eingereicht werden. Was soll das?
Lösung
Eine Taste in einem HTML-Formular wird angenommen, verwendet werden, um das Formular abzuschicken. Ändern Taste input type = "button" und das sollte es beheben.
Alternativ type = "button" auf die Schaltfläche Element hinzufügen.
Andere Tipps
als erstes, gibt ein ID-Taste zu suchen. Dann auf Textbox, können Sie Client-Ereignis abfangen onkeydown , mit einem (Javascript) Funktion wie folgt aus:
function KeyDownHandler(event)
{
// process only the Enter key
if (event.keyCode == 13)
{
// cancel the default submit
event.returnValue=false;
event.cancel = true;
// submit the form by programmatically clicking the specified button
document.getElementById('searchButtonId').click();
}
}
I Höper ich Ihnen helfen.
, wenn es ein einziges Eingabefeld ist in der Form, geben viele Browser die Formulare automatisch, wenn die Enter-Taste getroffen wird.
Versuchen
- Fügen Sie ein weiteres Eingabefeld. Verstecken Sie es, indem sie es Styling so ist es nicht sichtbar. (Z.B.
<input type="text" name="bogusField" style="display: none;" />
- Block eingeben das Schlüssel Formular Verhalten innerhalb eines JavaScript-Event-Handler (zB hier oder hier ). Noch besser ist, verwenden Sie einen GUI-Toolkit, das dabei helfen kann (zum Beispiel GWT)