通过 JavaScript 强制 HTML 表单验证

Posted

技术标签:

【中文标题】通过 JavaScript 强制 HTML 表单验证【英文标题】:Force HTML form validation via JavaScript 【发布时间】:2016-03-27 22:53:23 【问题描述】:

我创建了一个 html 表单,它有两个按钮(而不是提交按钮),每个按钮都以编程方式将表单发送到一个唯一的表单操作地址。

<form id="formExample">
<input type="text" id="input1" required>
<label type="button" onClick="form1()">Form Action 1</label>
<label type="button" onClick="form2()">Form Action 2</label>
</form>

脚本:

form = document.getElementById("formExample");

function form1() 
    form.action="example1.php";
    form.submit();

function form2() 
    form.action="example2.php";
    form.submit();

运作良好,响应您按下的按钮。但是,之前工作的相同 html 表单验证(使用“提交”按钮时)不再显示提示,并且无论是否有输入,表单都会发送。

我已经读过,因为我以编程方式调用 form.submit(),它绕过了表单的 onSubmit() 函数,这是进行验证的地方。

我的问题是:我可以以编程方式强制 onSubmit() 以便弹出验证吗?我必须明确表示我不想创建 javascript 表单验证,即使用警报;相反,当您单击提交时,请使用 JavaScript 来执行此处的 HTML 验证:https://jsfiddle.net/qdzxfm9u/

【问题讨论】:

您只需将按钮的类型从button 更改为submit 并从您的JS 部分中删除form.submit() 如果你会使用JQuery,看看this answer。 干杯@cFreed,这已经解决了问题!如果您想在答案部分再次提供它,我很乐意接受作为解决方案。谢谢! 大功告成!很高兴为您提供帮助,也很高兴您接受我的回答 :) @dantan04,你可以考虑&lt;input type="submit" onClick="form1()" value="Form Action 1" /&gt;而不是&lt;label type="submit" onClick="form2()"&gt;Form Action 2&lt;/label&gt;,因为后者不是一个有效的HTML,把你的表单html放在validator.w3.org/nu/#textarea的正文中,然后点击check 【参考方案1】:

您只需将按钮的类型更改为 submit 并从 JS 部分中删除 form.submit()

所以HTML部分变成了:

<form id="formExample">
<input type="text" id="input1" required>
<button type="submit" onClick="form1()">Form Action 1</button>
<button type="submit" onClick="form2()">Form Action 2</button>
</form>

这样,点击任意按钮自行提交,但之前执行的是JS部分:

form = document.getElementById("formExample");

function form1() 
    form.action="example1.php";

function form2() 
    form.action="example2.php";


编辑

警告:我最初的解决方案是基于 OP HTML 部分的副本,其中“伪按钮”使用了一个奇怪的元素 &lt;label type="input"...&gt;,所以我读(太快)就好像它是 &lt;button type="button"...&gt; 一样简单将 typeinput 更改为 submit! 这样,它就无法按预期工作。

现在在上面的代码中更正了。

【讨论】:

"点击任何按钮都会自行提交,但在执行 JS 部分之前" 他必须执行 js 部分,因为他需要决定必须附加哪个操作到表格 @Mi-Creativity。我不明白你的意思。我同意必须执行 JS 部分,但这就是发生的事情。 我的意思是如果 JS 部分不会被执行,那么表单的 action= 属性将是什么 - example1.phpexample2.php - 考虑到它只是通过JS设置? @Mi-Creativity。严格来说,如果没有执行 JS 部分,那么我们知道默认适用,即当前脚本用作 action 值。但在当前情况下,这不会发生,因为它是这样编写的,每个提交按钮都有自己的onclick 事件触发所需的处理程序。 请耐心等待,所以JS部分在点击时执行然后表单根据你的代码提交,检查这个链接phpfiddle.org/lite/code/rt18-mzu9 - hit run to execute - 这正是你的代码,带有一点 CSS,我想知道它是否显示 HTML 验证并提交并为你工作。【参考方案2】:

也许是这样的:

var form = document.getElementById("formExample");

function form1() 
  form.action="example1.php";


function form2() 
  form.action="example2.php";
<form id="formExample">
  <input type="text" id="input1" required>
  <input type="submit" onClick="form1()" value="Form Action 1" />
  <input type="submit" onClick="form2()" value="Form Action 2" />
</form>

【讨论】:

这是正确的!我没有接受它作为答案的唯一原因是因为有人在您之前在我的 cmets 提要上提出了相同的想法。我很感激你的努力。【参考方案3】:

创建一个dropdown 列表怎么样 - 可以是单选按钮 - 包含表单两个操作和一个提交按钮,就像在这个 JS Fiddle 中一样,然后在表单 submit 上具有一个功能

var form = document.getElementById("formExample"),
    select = document.getElementById("slct");

form.addEventListener('submit', function() 
  if (select.value == 1) 
    form.action = "example1.php";
   else 
    form.action = "example2.php";
  
  // alert for demo only
  alert(form.action);
  form.submit();
);
<form id="formExample">
  <input type="text" id="input1" required>
  <select id="slct" required>
    <option></option>
    <option value="1">Form Action 1</option>
    <option value="2">Form Action 2</option>
  </select>
  <button type="submit">Submit</button>
</form>

【讨论】:

【参考方案4】:
function togglePassword(el)
     var checked = el.checked;
     if (checked) 
        document.getElementById("password").type = 'text';
        document.getElementById("toggleText").textContent= "Hide";
      else 
        document.getElementById("password").type = 'password';
        document.getElementById("toggleText").textContent= "Show";
     
  

  function login()
  
     var uname = document.getElementById("uname").value;
     var password = document.getElementById("password").value;
     if(uname === '')
     
        alert("Please enter the user name.");
     
     else if(password === '')
     
        alert("Enter the password");
     
     else
     
        alert('Login Successful. Thank You!');
     
  

  function clearFunc()
  
     document.getElementById("uname").value="";
     document.getElementById("password").value="";

<script type="text/javascript">
      function togglePassword(el)
         var checked = el.checked;
         if (checked) 
            document.getElementById("password").type = 'text';
            document.getElementById("toggleText").textContent= "Hide";
          else 
            document.getElementById("password").type = 'password';
            document.getElementById("toggleText").textContent= "Show";
         
      

      function login()
      
         var uname = document.getElementById("uname").value;
         var password = document.getElementById("password").value;
         if(uname === '')
         
            alert("Please enter the user name.");
         
         else if(password === '')
         
            alert("Enter the password");
         
         else
         
            alert('Login Successful. Thank You!');
         
      

      function clearFunc()
      
         document.getElementById("uname").value="";
         document.getElementById("password").value="";
        
   </script>     
/* heading  */
h1 
    display: block;
    font-size: 2em;
    font-weight: bold;
    /* padding: 0% 1% 3% 6.5%; */
    margin: 0% 35% -10% 36%;



h1:hover
  color:#4499d9 ;
  transform: translateY(-5px);



/* bg image */
body 
  background-image: url('img/bg4.jpg');
  background-repeat: no-repeat;
  background-attachment: fixed;
  background-size: 100% 100%;



/* Bordered form */
form 
 /*  border: 13px solid black; */
  width: 27%;
  height: auto;
  position: absolute;
  left: 10%;
  margin-left: -3px;
  top: 18%;


/* Full-width inputs */
input[type=text], input[type=password] 
  width: 100%;
  padding: 12px 20px;
  margin: 8px 0;
  display: inline-block;
  border: 1px solid #ccc;
  box-sizing: border-box;


/* Set a style for all buttons */
button 
  background-color: #17234b;
  color: white;
  padding: 14px 20px;
  margin: 8px 0;
  border: none;
  cursor: pointer;
  width: 49%;


/* Add a hover effect for buttons */
button:hover 
  background-color: #4499d9;
   transform: translateY(-5px);
  box-shadow: 1px 3px 7px #6f6d72;


#toggleText 
    display: block;



/* Center the avatar image inside this container */
.imgcontainer 
  text-align: center;
  margin: 24px 0 12px 0;


/* Avatar image */
img.avatar 
     width: 30%;
    border-radius: 20%;
     box-shadow: 1px 3px 9px #6f6d72;


img.avatar:hover
   transform: translateY(-5px);
  box-shadow: 7px 9px 9px #6f6d72;


/* Add padding to containers */
.container 
  padding: 16px;


span.buttons
    width: 100%;
    display: flow-root;


#toggleText
  float: left;


#toggle
  float: left;
<!DOCTYPE html>
<html>
<head>
    <link rel="stylesheet" type="text/css" href="style.css">
</head>

<body>
   <h1>LOGIN PANEL</h1>
   <!-- Login Form -->
   <div class="form"> 
      <form >
         <div class="imgcontainer">
            <img src="img/Login.jfif"  class="avatar">
         </div>
         <div class="container">
            <label for="uname"><b>Username</b></label>
            <input type="text" placeholder="Enter Username" id="uname" name="uname"/>
            <label for="password"><b>Password</b></label>
            <input type='password'placeholder="Enter Your Password" name="password" id='password'/>
            <input type='checkbox' id='toggle' onchange='togglePassword(this)'><span id='toggleText'>Show</span>
            <span class="buttons">
               <button type="submit" value="Reset" onclick="clearFunc()" class="btn">Reset</button>
               <button type="submit" value="Login" class="btn" onClick="login()">Login</button>
            </span>
         </div>
      </form>
   </div> 


 
</body>
</html>

【讨论】:

欢迎来到 Stack Overflow。没有任何解释的代码很少有帮助。 Stack Overflow 是关于学习的,而不是提供 sn-ps 来盲目复制和粘贴。请编辑您的问题并解释它如何回答所提出的具体问题。见How to Answer。

以上是关于通过 JavaScript 强制 HTML 表单验证的主要内容,如果未能解决你的问题,请参考以下文章

https怎么强制转成http

HTML javascript 表单 - 我可以通过哪些其他方式使用表单验证来编写这个 javascript 函数

如何通过强制另存为选项来保存网页的内容/文本

通过 HTML 表单 + JavaScript 向 MailChimp API 提交 JSON 结构

javascript获取html表单中的值?

防止表单输入类型=“数字”中的负输入?