【问题标题】:Javascript preventing Spring form from being POSTed防止发布 Spring 表单的 Javascript
【发布时间】:2009-07-14 22:04:07
【问题描述】:

这里发生了奇怪的问题。我正在开发一个使用 Spring 和 Spring form taglib 的 JSR168 portlet。

我在页面上有一个搜索表单,可以根据用户选择的条件浏览报告目录,并且大部分情况下它都可以正常工作。但是,有一系列事件会触发错误。

我发现有一个 JavaScript 函数可以清除用户可以指定的 7 个条件。它清除所有文本框,将所有下拉列表的选定索引设置为 0,并将一组单选按钮默认为我想要默认的单选按钮。所以这一切都很好,而且效果很好。

以下是 2 个场景,1 个演示它按预期工作,1 个显示错误。

  • 输入一些东西
  • 点击搜索
    • 显示结果
  • 点击搜索
    • 显示结果(与之前相同)
  • 输入新内容并单击搜索
    • 显示结果(新的、正确的结果)

这是错误

  • 输入一些东西
  • 点击搜索
    • 显示结果
  • 单击运行 JavaScript 的“清除表单”
    • 表单已清除
  • [可选,它不会改变任何东西:输入一些东西]
  • 点击搜索
    • 结果没有变化
  • 再次单击搜索
    • 现在显示正确的结果

这是供参考的JavaScript(我不知道这是好还是坏的JS,我过去没有写过)

function clearForm(oForm) {

  var elements = oForm.elements;

  oForm.reset();

  for(i=0; i<elements.length; i++) {

      field_type = elements[i].type.toLowerCase();

      switch(field_type) {

        case "text":
        case "password":
        case "textarea":
              case "hidden":

          elements[i].value = "";
          break;

        case "radio":
        case "checkbox":
            if (elements[i].checked) {
              elements[i].checked = false;
          }
          break;

        case "select-one":
        case "select-multi":
                    elements[i].selectedIndex = 0;
          break;

        default:
          break;
      }
   }
}

【问题讨论】:

    标签: javascript spring jsp forms


    【解决方案1】:

    我通过将清除表单 Javascript 更改为仅清除我指定的框来解决此问题。我假设上面发布的通用函数正在清除 Spring 放置的一些隐藏值并导致错误。

    【讨论】:

    • 如果 Spring 通过隐藏字段维护视图状态(就像 JSF 一样),那么您是完全正确的。简单/明显的解决方法是跳过重置功能中的隐藏字段。 IE。从您的交换机中删除 case "hidden":
    【解决方案2】:

    你不能直接使用:

    <input type="reset" /> 
    

    清除您的表格?我相当确定它将表单设置为页面加载时的样子。

    【讨论】:

    • 不幸的是,事情没那么简单。我使用来自支持 bean 的数据加载表单(因为有 7 个字段,这对用户来说很好,因为它可以让他们看到他们刚刚搜索的内容并且只编辑 1 件事,而不必重新输入所有内容)。因为这是加载的默认数据,所以重置只是返回到该数据,而不是实际清空文本字段并将 DDL 默认为其中的第一项。
    • 并且您希望输入返回到它们的原始值?您可以将它们作为变量存储在 javascript 中吗?
    猜你喜欢
    • 2021-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-25
    • 2020-01-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多