在js中进行表单验证

在js中进行表单验证

问题描述:

我正在验证表单,我不确定是否使它比需要更复杂。我有一个变量,我比较的元素,然后成功取代IMG SRC检查成功或X失败。它应该运行我的validateData函数,一旦该领域未聚焦。这是js。当我通过输入数字来触发redx.png src变化来测试第一个字段时,我的img src src不会改变。在js中进行表单验证

function validateData() { 
    var letters = /^[A-Za-z]+$/; 
    var image1=document.getElementsById("image1"); 

    if (document.forms["quiz_form"]["last_name"].value.match(letters) && document.forms["quiz_form"]["last_name"].value!="") 
    { 
    image1.src="check.png"; 
    } 
    else{ 
    image1.src="redx.png"; 
    } 

} 
<!DOCTYPE html> 
<html> 
    <head> 
    <title></title> 
    <meta name="author" content="Kenneth Dunn" /> 
    <meta name="description" content="" /> 
    <script src="quiz.js"></script> 
    <link rel="stylesheet" href="quiz.css" type="text/css" /> 
    </head> 
    <body> 
    <div id="page"> 
     <div id="logo"> 
     <h1><a href="https://playoverwatch.com">Overwatch</a></h1> 
     </div> 
     <div id="content"> 
     <h2>Overwatch Quiz</h2> 
     <p> 
      Hi there! 
      This quiz is dedicated to one of my favorite games Overwatch! 
     </p> 
     <form action="quiz.js" method="post" name="quiz_form"> 
      <p><br> 
      <input name "first_name" type="text" placeholder="First Name" onblur="this.placeholder='First Name'" onfocus="this.placeholder='Use only letters'" onblur="validateData()"/> 
      <img src='http://www.q-park.ie/Portals/8/images/search-icon.png' id="image1" class="image1"/> 
      </p> 

      <p><br> 
      <input name="last_name" type="text" placeholder="Last Name" onblur="this.placeholder='Last Name'" onfocus="this.placeholder='Use only Letters'" onblur="validateData()" /> 
      <img src='http://www.q-park.ie/Portals/8/images/search-icon.png' id="image2" class="image2"/> 
      </p> 

      <p><br> 
      <input name="email" type="text" placeholder="Email" onblur="this.placeholder='Email'" onfocus="this.placeholder='Must contain @ '" onblur="validateData()"/> 
      <img src='http://www.q-park.ie/Portals/8/images/search-icon.png' id="image3" class="image3"/> 
      </p> 

      <p><br> 
      <input name="number" type="text" placeholder="Phone Number" onblur="this.placeholder='Phone Number'" onfocus="this.placeholder='Must follow xxx-xxx-xxx '" onblur="validateData()" /> 
      <img src='http://www.q-park.ie/Portals/8/images/search-icon.png' id="image4" class="image4"/> 
      </p> 

      <p><br> 
      <input name="sulley" type="text" placeholder="Sulley Email" onblur="this.placeholder='Sulley Email Address'" onfocus="this.placeholder='Must contain ~ and https:// '" onblur="validateData()" /> 
      <img src='http://www.q-park.ie/Portals/8/images/search-icon.png' id="image5" class="image5"/> 
      </p> 
      <br> 
      <br> 
      <p> 

      <h2>Find out which Overwatch character you are most like!</h2> 

      <p>If you could pick what form to take in a fictional universe with magic and cool science what would you want to be?</p> 

      <input type="radio" name="exist" value="1">Male(Human).<br> 
      <input type="radio" name="exist" value="2">Female(Human).<br> 
      <input type="radio" name="exist" value="3">An Animal or something crazy. 

      <p>What is your preferred weapon to take on bad guys and defend yourself?</p> 

      <input type="radio" name="weapon" value="1">Twin Shotguns for close range.<br> 
      <input type="radio" name="weapon" value="2">Twin pistols medium range.<br> 
      <input type="radio" name="weapon" value="3">An electro gun that schocks enemies into submission. 

      <p>Which motivations most align with your own?<p> 

      <input type="radio" name="idea" value="1">To become more powerful and to defeat those who would oppose me.<br> 
      <input type="radio" name="idea" value="2">To explore the world and discover the unknown.<br> 
      <input type="radio" name="idea" value="3">To protect my friends and those I care about. 

      <p>What do you look like?</p> 

      <input type="radio" name="look" value="1">Dark and mysterious black-hooded figure ,very edgy, like people in the Matix.<br> 
      <input type="radio" name="look" value="2">Short and spunky British airforce pilot who can travel back in time.<br> 
      <input type="radio" name="look" value="3">I'm a large gorilla who likes to eat bananas and peanut butter and can sheild my friends from harm. 

      <br> 
      <br> 
      <input type="submit" name="submit" id="submit" value="submit" /> 
      <input type="reset" name="reset" id="reset" value="Reset" /> 
      </p> 
     </form> 
     <br> 
     <br> 
     <br> 
     <br> 

     <div id="footer"> 
     <h2 align="center" >Created by </h2> 
     </p> 
    </div> 
    </div> 
    </div> 
</body> 
</html> 
+3

什么问题?你的HTML在哪里? –

+0

@CarlMarkham img src在测试时不会改变,我不知道为什么。我已经更新它来添加我的HTML。 – Phlash6

+0

每个输入上都有两个onblur =“”。你不应该用JS处理占位符文本,使用placeholder =“Some Text”属性。 – xCNPx

你不能只是简单地设置action你的JS脚本,您将需要使用onsubmit事件处理程序。

<form onsubmit="validateData"> 

一旦提交表单这将触发validateData方法。这不会执行,虽然像往常一样停止形式,你需要停止在您的validateData方法,像这样:

function validateData (event) { 
    // prevent the form from actually submitting 
    event.preventDefault(); 
} 
+0

我有没有办法使用onblur在页面上实时运行验证? – Phlash6

+0

我有网站的单独部分的提交按钮,我不希望将其用于验证,只是根据表单验证中检查的正确或错误输入动态显示img。 – Phlash6

这里有多个问题;有些已被别人提及。其中一个主要问题是您有getElementsById而不是getElementById。如果您还没有弄清楚如何拉开开发者控制台并查看您遇到的错误,现在将是一个好时机。

表单验证可能会变得非常复杂,通常我会使用一个库来完成繁重的工作。你可以看看。

这是我猜你正在尝试做的工作版本。这远非最佳,但这正是我很快就能想出来的。

https://jsfiddle.net/ec2L08vf/1/

+0

感谢您的帮助,我会仔细看看我写的是什么来解决这个问题,作为一个附注,我试图把jsfiddle代码放到我现有的.html和.js文件中进行测试,它确实运行就像它在jsfiddle中做的一样,有什么我失踪了? – Phlash6

+0

我猜你的现有代码中存在一个阻止JavaScript的错误。打开控制台并观察。 – imjosh

+0

我检查过,没有任何东西在控制台中,当我将它放在它工作的html页面的脚本标记中,但是在我的本地机器上,却没有。可能与不上传到现场网站有关。 – Phlash6