2015-02-09 56 views
0

在下面的代码中,validateName函数完全不起作用。即使在名称文本框中输入了正确的字符,警报仍然显示出来。我究竟做错了什么?它似乎只是因为validateName函数而中断。一旦删除其他2工作正常。validateName函数不起作用

<!DOCTYPE html> 
    <html lang="en"> 
     <head> 
     <script> 

/* 
Check required form elements script- 
By JavaScript Kit (http://javascriptkit.com) 
Over 200+ free scripts here! 
*/ 



function checkrequired(which){ 
var pass=true 
if (document.images){ 
    for (i=0;i<which.length;i++){ 
     var tempobj=which.elements[i] 
     if (tempobj.name.substring(0,8)=="required"){ 
      if (((tempobj.type=="text"||tempobj.type=="textarea")&&tempobj.value=='')||(tempobj.type.toString().charAt(0)=="s"&&tempobj.selectedIndex==-1)){ 
       pass=false 
       break 
      } 
     } 
    } 
} 
if (!pass){ 
    alert("One or more of the required elements are not completed. Please complete them, then submit again!") 
    return false 
} 
else 
    return true 
} 
</script> 
      <script type="text/javascript"> 

/**-------------------------- 
//* Validate Date Field script- By JavaScriptKit.com 
//* For this script and 100s more, visit http://www.javascriptkit.com 
//* This notice must stay intact for usage 
---------------------------**/ 

function checkdate(input){ 
var validformat=/^\d{2}\/\d{2}\/\d{4}$/ //Basic check for format validity 
var returnval=false 
if (!validformat.test(input.value)) 
    alert("Invalid Date Format. Please correct and submit again.") 
else{ //Detailed check for valid date ranges 
    var monthfield=input.value.split("/")[0] 
    var dayfield=input.value.split("/")[1] 
    var yearfield=input.value.split("/")[2] 
    var dayobj = new Date(yearfield, monthfield-1, dayfield) 
    if ((dayobj.getMonth()+1!=monthfield)||(dayobj.getDate()!=dayfield)||(dayobj.getFullYear()!=yearfield)) 
     alert("Invalid Day, Month, or Year range detected. Please correct and submit again.") 
    else 
     returnval=true 
} 
if (returnval==false) input.select() 
return returnval 
} 

</script> 
<script> 
function validateName(name) { 
    var cap = /^[A-Z]{1}.+$/; 
    var con = /[bcdfghjklmnpqrstvwxyz]/i; 
    var vow = /[aeiou]/i; 
    if(cap.test(name) && con.test(name) && vow.test(name)) { 
     return true; 
    } else { 
     alert("Must be non-blank, must begin with a capital letter, and must contain at least one vowel and one consonant"); 
     return false; 
    } 
} 
</script> 
      <title>Comments</title> 
      <meta charset="utf-8"> 
     </head> 
    <body> 
<form name="usercomments" onSubmit= "return checkrequired(this) || validateName(this.name) || checkdate(this.requiredbday)"> 
Please input a valid email address:<br /> 
<input type="text" size=18 name="requiredemail"> 
<br/> 
<br/> 
Full name: 
<input type="text" size=30 name="name"> 
<br/> 
<br/> 
Please provide feedback: 
<input type="text" size="80" style="height:200px" name="requiredmessage"> 
<br/> 
<br/> 
Phone number: 
<input type="text" size=15 name="requiredphone"> 
<br/> 
<br/> 
Birth date (mm/dd/yyyy): 
<input type="text" size=15 name="requiredbday"> 
<br/> 
<input type="submit" value="Submit"> 
</form> 
</body> 
</html> 
+0

被它给任何错误? – 2015-02-09 06:54:08

回答

0

在validateName函数中,您应该检查name.value,就像在checkdate函数中一样。

+0

2015-02-09 17:38:02

0

至于拉法尔被提,你应该使用名称的价值不仅是“ID”

为了解释或您自己的未来的测试。对于这样的脚本,如果它确实是您正在测试的内容,或者它确实是您期望的“价值”,则可以使用“警示”来查看您要查找的内容。

在这种情况下,尝试

alert(name) 

那么你可以看看如果返回你在找什么。

0

变化与<form>就行了:

<form name="usercomments" onSubmit="return checkrequired(this) && validateName(this.name) && checkdate(this.requiredbday)">