【问题标题】:Seam/JSF form submit firing button onclick eventSeam/JSF 表单提交触发按钮 onclick 事件
【发布时间】:2010-09-12 03:27:52
【问题描述】:

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

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

结果是表单中同时包含&lt;button/&gt;&lt;input type="submit"/&gt; 的HTML。如果用户在表达式字段中输入一个字符串并按下回车键而不是单击提交按钮,则当预期的行为是提交搜索时会显示查询构建器。什么给了?

【问题讨论】:

    标签: java html firefox jsf seam


    【解决方案1】:

    假定 HTML 表单中的按钮用于提交表单。将按钮更改为输入 type="button" 应该可以修复它。

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

    【讨论】:

      【解决方案2】:

      首先,为“搜索”按钮提供一个 ID。 然后,在文本框上,您可以拦截客户端事件 onkeydown,使用如下 (javascript) 函数:

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

      希望能帮到你。

      【讨论】:

        【解决方案3】:

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

        试试

        1. 添加另一个输入字段。通过设置样式将其隐藏,使其不可见。 (例如,&lt;input type="text" name="bogusField" style="display: none;" /&gt;
        2. 在 JavaScript 事件处理程序(例如,herehere)中阻止输入键表单提交行为。更好的是,使用可能对此有所帮助的 GUI 工具包(例如 GWT)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-05-01
          • 2015-08-19
          相关资源
          最近更新 更多