javascript - 如果 jQuery 表单有效显示隐藏的 div

标签 javascript jquery html forms validation

我一直在使用两个相同的表单进行一些表单验证。到目前为止,我在表单上进行了默认的 HTML 验证,但由于某种原因,当我提交表单时,它重新加载了表单,但没有显示我的消息,即它已成功。

这是我的表单内容:

HTML

<div class="place-form">
   <div class="success-msg" style="display:none;">
    <p>Thanks for your submission! We will contact you shortly.</p>
  </div>
  <div class="form-wrap">
    <form id="place-form-item">
    <div class="form-row">
      <input id="fname" type="text" name="fname" placeholder="Your First Name" required />
    </div>
    <div class="form-row">
      <input id="lname" type="text" name="lname" placeholder="Your Last Name" required />
    </div>
    <div class="form-row">
      <input id="form-email" type="email" name="email" placeholder="Your Email" required />
    </div>
    <div class="btn-row">
      <button class="submit-btn">submit</button>
    </div>
      </form>
  </div>
</div>

JS:

$(".submit-btn").click(function(e){
   var $this = $(this);
   if($this.find("#place-form-item").valid()) {
       $this.parents(".form-wrap").hide();
       $this.parents().next(".success-msg").show()
     e.preventDefault();
   }
});

不确定如何获取它以便在单击时表单通过验证然后隐藏一个表单并显示成功消息。除非我定位不正确。

最佳答案

嗯,首先你知道.valid()方法是一个JQuery插件,对吧?如果没有插件,if 语句中的代码将永远无法到达。

有一个纯 JavaScript API 用于根据 HTML5 有效性框架检查表单的有效性 - .checkValidity()

接下来,您的 .next() 调用不会找到成功消息,因为它不是您按钮的下一个元素。该调用和您的 .find() 调用都可以通过使用更高级别的选择器作为搜索上下文来替换。

接下来,不要使用提交按钮的 click 事件。使用表单的 submit 事件。

最后,使用 CSS 类比在元素上动态创建内联样式更好。

$("#place-form-item").on("submit", function(e){
   var $this = $(this);
   if(this.checkValidity()) {
      e.preventDefault();
      $this.parents(".form-wrap").hide();
      $(".success-msg", ".place-form").removeClass("hidden")
   }
});
.hidden { display:none; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="place-form">

  <div class="success-msg hidden">
    Thanks for your submission! We will contact you shortly.
  </div>
  
  <div class="form-wrap">
  
    <form id="place-form-item">
      <div class="form-row">
        <input id="fname" type="text" name="fname" placeholder="Your First Name" required>
      </div>
      <div class="form-row">
        <input id="lname" type="text" name="lname" placeholder="Your Last Name" required>
      </div>
      <div class="form-row">
        <input id="form-email" type="email" name="email" placeholder="Your Email" required>
      </div>
      <div class="btn-row">
        <button class="submit-btn">submit</button>
      </div>
    </form>
    
  </div>
</div>

关于javascript - 如果 jQuery 表单有效显示隐藏的 div,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47295280/

相关文章:

javascript - 记录未按时加载以计算组件中的属性?

javascript - 为什么 mocha 需要在 devDependencies 中?

php - 如何在一个网页上播放多个声音文件? (点击最佳实践)

javascript - 无法获取 jQuery AJAX 响应 header

html - Select 标签中的 Option 可以携带多个值吗?

javascript - Google map 标记图钉未显示

javascript - 如何处理 JavaScript 中的条件复选框选择?

javascript - 为什么我的 JQuery .ajax 请求不是并行进行的?

php - 将 HTML 表格单元格值插入 MySQL

html - XPath查找其第一个子节点包含特定值的节点