【问题标题】:how to block form submit button如何阻止表单提交按钮
【发布时间】:2014-08-17 02:16:04
【问题描述】:

我正在处理我的 html 源代码,让用户在文本框中输入他们的电子邮件,然后单击提交按钮进入网站。

当用户没有在文本框中输入他们的电子邮件时,他可以点击提交按钮进入网站。我想阻止它以阻止他们进入该站点。

这是我使用的代码:

<div id="MainContent">
  <div id="content"></div>
  <div id="form">
  <div id="WFItem5736404" class="wf-formTpl">
    <form accept-charset="utf-8" action="https://app.getresponse.com/add_contact_webform.html?u=KLlP" method="post">
            <div id="WFIcenter" class="wf-body">
                        <div class="wf-contbox">
                            <div class="wf-inputpos">
                                <input name="email" class="Email" style="position: absolute; left: 4%; bottom: 110px; width: 90%; height: 51px;" type="text" data-placeholder="yes" placeholder="Enter your Email Address...">
                            </div>
                        </div>
                        <div class="wf-contbox">
                            <div class="wf-inputpos">
                                <input name="submit" class="button" style="position: absolute; left: 4%; bottom: 46px; width: 92.5%; height: 56px;" type="image" src="button.png">
                        </div>
            </div>
        </div>

        <input type="hidden" name="webform_id" value="5736404" />
    </form>
</div>
<script type="text/javascript" src="http://app.getresponse.com/view_webform.js?wid=5736404&mg_param1=1&u=KLlP"></script>
</div>
</div>
<script type="text/javascript">
var sprytextfield1 = new Spry.Widget.ValidationTextField("sprytextfield1", "email");
</script>

我想在电子邮件文本框下添加工具提示,以强制用户输入他们的电子邮件地址,然后他们才能点击提交进入网站。

您能否告诉我如何在文本框为空时阻止提交按钮进入网站,以便我可以在文本框下添加工具提示以强制用户输入他们的电子邮件?

【问题讨论】:

标签: javascript html


【解决方案1】:

您可以使用event.preventDefault() 监听submit 事件并阻止其默认(提交)行为

Demo fiddle

Javascript(纯)

var form = document.getElementById('yourFormId');
form.onsubmit = function (ev) {
   if (!inputDataIsValid()) {
      ev.preventDefault();
      alert('invalid input data');
   }
};

注意:如果你使用 jQuery,你可以这样做:

$('.form-selector').on('submit', function (ev) {
   if (!inputDataIsValid()) {
      ev.preventDefault();
      alert('invalid input data');
   }
});

【讨论】:

  • 如果不需要 IE8 或更低版本的支持,form.addEventListener() 是更好的选择。
  • @Matyas 非常感谢你,但我有一个问题。我如何使用 javascript 来处理我当前的代码?
【解决方案2】:

required 属性添加到input 元素,如下所示:

<input required name="email" class="Email" style="position: absolute; left: 4%; bottom: 110px; width: 90%; height: 51px;" type="text" data-placeholder="yes" placeholder="Enter your Email Address...">

这会阻止表单提交,直到用户填写 input,如果用户尝试在未填写该字段的情况下提交表单,则会显示工具提示。这是来自W3Schoolsrequired 属性的说明性示例以及来自MDN 的属性的一个很好的解释。

【讨论】:

  • 这很有趣,但 w3schools 声称它在 Safari、IE9 或 IE8 中不起作用
  • IE10 支持它。
  • 我知道 w3schools 不是权威,但我想他们经常是对的。在这种情况下,'required' 是一个 HTML5 属性,老版本的 IE 没有实现它也就不足为奇了
  • 你最好在 SO 上引用 W3 规范或 MDN。例如,MDN explains it nicely,底部有一个浏览器兼容性图表。
  • 要点,尽管 W3Schools 确实提供了这种情况下的示例。我已将 MDN 链接添加到我的答案中。
【解决方案3】:

您可以尝试在 input[name=email] 标签的末尾添加required pattern="[^ @]+@[^ @]+.[a-z]+",如下所示:

<input name="email" class="Email" style="position: absolute; left: 4%; bottom: 110px; width: 90%; height: 51px;" type="text" data-placeholder="yes" placeholder="Enter your Email Address..." required pattern="[^ @]+@[^ @]+.[a-z]+" />

这不仅仅是检查输入的内容。
这还将检查电子邮件语法的有效性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-05
    • 1970-01-01
    • 1970-01-01
    • 2011-10-15
    • 1970-01-01
    • 2016-03-23
    • 1970-01-01
    • 2022-01-22
    相关资源
    最近更新 更多