【问题标题】:Submit Form Without Javascript不使用 Javascript 提交表单
【发布时间】:2011-10-17 03:01:02
【问题描述】:

我有一个表单,它依赖于 javascript 来完成所有客户端表单验证。如果正确填写了所有字段,而不是使用标准的“提交”按钮,则表单将通过 javascript 提交:

<button name="button" type=button onclick="validateReqFields('mForm', 'username, password, compPassword, firstName, lastName');">Register</button>

document[formName].submit();

如果客户端禁用了 javascript,则所有表单验证都在服务器端完成(它实际上会再次执行,但这并不重要)。问题在于使用带有按钮类型的按钮而不是提交。它与 javascript 完美配合,但是当 javascript 不可用时,我该如何解决这个问题?如果我将提交按钮与 javascript 一起使用,那么它会在每次按下按钮时提交表单并且无法正常工作。

【问题讨论】:

  • 你应该使用&lt;input type="submit" value="Submit" onclick="validateReqFields(....)" /&gt;
  • 请看我下面的评论。我不能做到这一点。它在问题中清楚地说明了这一点。

标签: javascript html forms


【解决方案1】:

使用提交按钮而不是“按钮”按钮,然后让您的validateReqFields 函数在表单无效时返回 false。

如果你愿意,然后从 validateReqFields 中取出表单提交。

这边

  • 如果表单有效,则单击按钮会冒泡并提交表单
  • 如果表单无效,则javascript会取消按钮点击
  • 如果 javascript 被禁用,那么它将作为后备提交到服务器

【讨论】:

  • input[type=submit] 交换button 元素有什么好处?
  • @alex 表单不会在按钮元素上提交。
  • 不是 OP 示例的形式。
  • @MattTew:是的,只要 JavaScript 取消默认行为。
【解决方案2】:

type 属性更改为submit

<button name="button" type="submit" ... />

【讨论】:

  • 我不能这样做,因为它不允许我的 javascript 阻止页面提交,从而使我的 javascript 无用,因为页面无论如何都会提交并且只使用服务器端验证。
  • @ryandl:你应该使用event.preventDefault()
【解决方案3】:

在禁用 javascript 时使用&lt;noscript&gt;&lt;/noscript&gt; 标签定义“正常”提交按钮。

【讨论】:

    【解决方案4】:

    您也许可以使用&lt;noscript&gt; 标记并将上述代码封装为按钮类型为提交。如果客户端有js,noscript里面的代码会被忽略。

    【讨论】:

    • 那么在禁用javascript并且页面使用noscript标签的情况下,我不会在页面上有两个按钮吗?
    • 如果你要否决“使用noscript”的答案,至少解释一下为什么你认为它没有用。
    猜你喜欢
    • 2016-01-04
    • 2014-01-04
    • 2011-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多