【问题标题】:JSP / servlet / IE combination doesn't submit form detail on EnterJSP / servlet / IE 组合在 Enter 上不提交表单详细信息
【发布时间】:2010-03-03 08:02:19
【问题描述】:

使用 IE 7、JDK 1.6 和 Sun Web 服务器 7。

在 jsp 表单中,我们有:

<input type="text" name="id" maxlength="20" />
<input ... type="submit" name="send" value="Send"/>

即一个文本框和一个“提交”按钮(称为发送)。

并且 servlet 具有:

if (request.getParameter("send") != null && request.getParameter("send").trim().length() > 0) { ... }

使用Fiddler和IE,我们可以看到当我们填充id文本框并回车时发送了以下内容:

id=123456

但是,使用 Fiddler 和 IE,当我们填充 id 文本框并点击发送按钮时,我们可以看到发送了以下内容:

userId=123456&send=发送

最终结果是按下 Enter 键实际上什么也没做。

在其他 jsp 页面上,例如我们有:

<input type="text" name="id" maxlength="20" />
<input ... type="submit" name="submitId" value="Submit"/>

并且 servlet 具有:

if (request.getParameter("submitId") != null && request.getParameter("submitId").trim().length() > 0) { ... }

使用 Fiddler 和 IE,我们可以看到两种情况都发送了以下内容:

id=123456&submitId=提交

所以在我们看来,该行为仅在 IE 上显示“提交”按钮不称为“提交”的表单?

在 Firefox 3.6 上重新运行测试表明行为是正确的,并且在两种情况下都是相同的。

对于让 IE 正常工作有什么建议吗?

(注意:我已经搜索过类似的问题,但与此相关的问题主要与 ASP 相关!)。

【问题讨论】:

  • 将来,当遇到浏览器特定的问题时(即在浏览器 X 中工作,但在浏览器 Y 中工作),那么它几乎是一个纯粹的客户端问题。然后,第一步是完全从故事中排除服务器端技术,只使用“普通的”HTML 文件。如果省略表单操作和方法,默认情况下会提交给 self,请求参数将在 URL 中显示为查询字符串。这更容易调试:)
  • @nzpcmad: 请检查表单是否有多个“输入类型='提交'”。
  • 当同一个表单中有多个 INPUT type=submit 时,按下回车会使用第一个 INPUT type=submit 提交表单,除非另一个 INPUT type=submit 具有焦点。当另一个 INPUT type=submit 具有焦点时,按 Enter 将使用该 INPUT type=submit 提交表单。
  • @Shashi Bhushan:不——肯定只有一个“input type='submit'”。
  • 嗯,也许你误解了我评论的全部意义和/或错过了“调试”这个词? :o

标签: java html internet-explorer jsp


【解决方案1】:

对于只有一个输入字段的表单,这确实是另一个 IE 异常。唯一可靠的解决方法是添加第二个输入字段(!)。您可以使用 CSS 隐藏它。不,type="hidden" 不行。

<input type="text" name="id" maxlength="20" />
<input type="text" style="display: none;" />
<input type="submit" name="send" value="Send"/>

【讨论】:

    【解决方案2】:

    您为什么要在 JSP 中检查 request.getParameter("submitId") 而实际上 submitId 是您的提交按钮的名称?

    根据我的经验,我从来不需要检查提交按钮的值。我只使用该按钮来触发表单提交,并且通常只对检索其他表单参数的值感兴趣。

    如果您想通过提交按钮的名称来区分提交方法,您可能想尝试使用input type="hidden" 添加“隐藏”属性。

    【讨论】:

    • 嗯,正常的做法是检查请求参数中是否存在按钮名称,以区分按下的按钮。您真的不想将隐藏的输入元素与 Javascript 结合使用来区分它。如果 JS 被禁用,表单会中断。
    • 感谢 BalusC。我并不是真的建议在 JS 中使用隐藏输入。我更多地考虑使用服务器端脚本填充值。但是看看你的回答,这似乎是 IE 的一个错误,所以请忽略我之前的建议。 ;)
    • Wrt Javascript:我没有看到其他方法来区分仅使用 input type="hidden" 元素按下的按钮:)
    猜你喜欢
    • 1970-01-01
    • 2017-05-25
    • 2016-10-09
    • 1970-01-01
    • 2013-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多