Seam / JSF表单提交触发按钮onclick事件

时间:2020-03-06 14:33:41  来源:igfitidea点击:

我有一个带有查询生成器的搜索表单。通过按钮激活构建器。像这样

<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>

结果是HTML表单中同时具有&lt;button />&lt;input type =" submit" />的HTML。如果用户在表达式字段中输入字符串,然后按Enter键而不是单击"提交"按钮,则当预期行为是提交搜索时,将显示查询构建器。是什么赋予了?

解决方案

假定使用HTML表单中的按钮来提交表单。将button更改为输入type =" button",这应该可以解决。

或者,将type =" button"添加到button元素。

首先,给"搜索"按钮指定一个ID。
然后,在文本框中,我们可以使用以下(javascript)函数拦截客户端事件onkeydown:

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();
        }
    }

我希望我能帮助你。

如果表单中只有一个输入字段,则许多浏览器在按下Enter键时会自动提交表单。

尝试

  • 添加另一个输入字段。通过样式隐藏它,使其不可见。 (例如,<< input type =" text" name =" bogusField" style =" display:none;" />`
  • 阻止JavaScript事件处理程序(例如,此处或者此处)中的Enter键表单提交行为。更好的是,使用可能对此有所帮助的GUI工具箱(例如GWT)