【问题标题】:Submit POST form no longer work after using Bootstrap Styling使用 Bootstrap 样式后提交 POST 表单不再起作用
【发布时间】:2017-05-21 17:50:06
【问题描述】:

上下文:

我正在为我的网站使用 NodeJS、Express、MailTransport 和 Bootstrap,创建了一个联系表单来向我发送个人电子邮件。

我创建了一个路由 /sayhi 来处理 mailtransport sendMail 方法并在它之后重定向回 /

然后我使用经典的 html 表单:

<form action="/sayhi" method="post" name="sendMail" id="sendMail">

有 3 个输入“发件人”、“邮件”和“文本”,与经典的 html 表单和类类似

<form action="/sayhi" method="post" name="sendMail" id="sendMail">
  <input type="text" name="from" placeholder="Who?"/>
  <input type="email" name="mail" placeholder="Mail?"/>
  <input type="text" name="text" placeholder="Why?"/>
  <input type="submit" value="Send"/>
</form>

但是当我尝试用 bootstrap 让事情变得更甜时,它不再调用 /sayhi

<form action="/sayhi" method="post" name="sendMail" id="sendMail">
  <div class="form-group">
    <label for="InputName">Name</label>
    <input type="text" name="from" id="InputName" aria-describedby="emailHelp" placeholder="John Appleseed" form="sendMail" class="form-control"/>
    <small id="nameHelp" class="form-text text-muted">How do you define yourself ?</small>
  </div>
  <div class="form-group">
    <label for="InputEmail">Email address</label>
    <input type="email" name="mail" id="InputEmail" aria-describedby="emailHelp" placeholder="you@yourdomain.com" form="sendMail" class="form-control"/>
    <small id="emailHelp" class="form-text text-muted">To contact you back !</small>
  </div>
  <div class="form-group">
    <label for="Textarea">Something to tell me ?</label>
    <textarea name="text" id="Textarea" rows="3" placeholder="blah" form="sendMail" class="form-control"></textarea>
    <small id="textHelp" class="form-text text-muted">It can be anything, really!</small>
  </div>
  <button value="Send" id="submit" type="submit" class="btn btn-primary">Submit</button>
</form>

编辑#1:

为了增加精度,我使用 Pug 作为我的模板引擎,并且我的表单位于一个特殊的 div 中以将其显示为叠加层

div.overlay
  div#email_form
    form(action="/sayhi" method="post" name="sendMail" id="sendMail")
      div(class="form-group")
          label.lettersB(for="InputName") Name
          input(type="text" name="from" class="form-control" id="InputName" aria-describedby="emailHelp" placeholder="John Appleseed" form="sendMail")
          small(id="nameHelp" class="form-text text-muted") How do you define yourself ?
      div(class="form-group")
          label.lettersB(for="InputEmail") Email address
          input(type="email" name="mail" class="form-control" id="InputEmail" aria-describedby="emailHelp" placeholder="you@yourdomain.com" form="sendMail")
          small(id="emailHelp" class="form-text text-muted") To contact you back !
      div(class="form-group")
          label.lettersB(for="Textarea") Something to tell me ?
          textarea(class="form-control" name="text" id="Textarea" rows="3" placeholder="Don't let The Blank Page Syndrome Hit!" form="sendMail")
          small(id="textHelp" class="form-text text-muted") It can be anything, really!
      button(value="Send" class="btn btn-primary" id="submit" type="submit") Submit

EDIT#2 问题出在我的覆盖类中,当我将表单从它移除时,它工作正常,但我不确定是什么导致了这种行为

CSS:

.overlay {
    display: none;
    position:absolute;
    top:0;
    left:0;
    right:0;
    bottom:0;
    background-color:rgba(0, 0, 0, 0.85);
    background: url(data:;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAAACCAYAAABytg0kAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAABl0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjUuNUmK/OAAAAATSURBVBhXY2RgYNgHxGAAYuwDAA78AjwwRoQYAAAAAElFTkSuQmCC) repeat scroll transparent\9;
    z-index:9999;
    color: white;
}
.overlay:before {
    content: '';
    display: inline-block;
    height: 100%;
    vertical-align: middle;
}

EDIT#3 问题似乎是我的表单嵌套在另一个 div 中,事件没有 CSS,只是它由按钮触发但仍然不知道它为什么会这样

【问题讨论】:

  • 以什么方式?请注意,您的提交值从 Send 更改为 AMA,请检查。
  • 您确定没有发送表单吗?你在节点端调试过这个吗?如,console.log("POST for /sayhi"); 就在处理程序的开头?表单提交对我来说很好:jsfiddle.net/1cmwchxf
  • 我已经编辑了我的帖子,问题出在我的表单所在的覆盖 div 中(我用按钮切换它)
  • 一个问题,你怎么知道它不起作用?
  • display: none;?你怎么能看到表格?正如@Ibu 所说,当您点击提交时实际会发生什么?

标签: javascript html node.js forms twitter-bootstrap


【解决方案1】:

您在评论中提供的额外信息表明您正在做的事情:

$(".overlay").click(function(){ 
    $(this).fadeOut("fast"); 
}).children().click(function(e) { 
    return false;
});

因此,任何点击 .overlay 内的任何元素 - 包括您的按钮 - on 都不会执行任何操作,因为您正在拦截它并返回 false。

【讨论】:

  • 谢谢,我得出了这个结论,我现在正试图解决这个问题:如果点击了.overlay div,我想隐藏它,但如果是孩子,我想隐藏它.overlay 是,除了我的#submit 按钮
  • 我尝试将 .not() 选择器与 children() 链接,但不明白为什么它不起作用
  • 它适用于 $(".overlay").click(function(){ $(this).fadeOut("fast"); }); $("#email_form").click(function(event) { event.stopPropagation(); }); 已解决,但仍然不知道为什么 .not() 不起作用
  • 您可以尝试我上面链接的答案,或者,当您使用 Bootstrap 时,您可以使用 Bootstrap modals,它会为您处理所有这些。
猜你喜欢
  • 1970-01-01
  • 2013-03-16
  • 1970-01-01
  • 2016-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-06
  • 2013-12-17
相关资源
最近更新 更多