2016-04-30 69 views
0

我试图显示一个隐藏的错误列表onsubmit,如果有任何输入是空白的。我不断收到jsFiddle中的错误,声明“Shell形式不验证。”我检查了我的语法,它看起来好(我是新的,所以我可能会错过一些东西)。Javascript窗体验证 - jsFiddle错误

任何帮助表示赞赏!

https://jsfiddle.net/2mpg7mbj/

HTML:

CSS:

#errors { 
    display:none; 
} 

的Javascript:

function validateForm() 
{ 

    var errorMsg = ''; 
    var errorDisplay = document.getElementByID('errors').style; 
    var errorList = document.getElementByID('errorList'); 

    var name = document.getElementByID('A').value; 
    var age = document.getElementByID('B').value; 
    var city = document.getElementByID('C').value; 

    if (name === '') { 
    errorMsg += '<li>Name</li>'; 
    }; 

    if (age === '') { 
    errorMsg += '<li>Age</li>'; 
    }; 

    if (city === '') { 
    errorMsg += '<li>City</li>'; 
    }; 

    if (errorMsg.length != '') { 
    errorList.innerHTML = errorMsg; 
    errorDisplay.display = 'block'; 
    return false; 
    }; 

return true; 
}; 

回答

1

您的形式更改为

<form method="POST" action='/endpoint' onsubmit="validateForm(event)"> 
    <label for="A">Name</label> 
    ... 

,然后在脚本中您需要更改document.getElementByID(...)document.getElementById(...)(“ID”,而不是“ID”)和preventDefault()方法在传递在停止默认表单提交过程的事件。

function validateForm(event) { 
    ... 
    if(errorMsg.length){ 
    ... 
    event.preventDefault(); 
    } 
    ... 

https://jsfiddle.net/stevenkaspar/2mpg7mbj/2/

+0

谢谢!选择这个是因为它不仅做我想做的事,还阻止了表单提交。 – PPJN

1

一些语法问题:

所有if块后删除;

if (age === '') { 

    errorMsg += '<li>Age</li>'; 
} 

errorMsg.length返回一个数字,而不是字符串。

if (errorMsg.length !== 0) { 

    errorList.innerHTML = errorMsg; 
    errorDisplay.display = 'block'; 
    return false; 
} 

变化document.getElementBy ID()来document.getElementById()

Demo with all fixed issues

+0

谢谢!这实现了我的目标,但它允许表单重新提交。使用Steven在下面指出的方法阻止了表单提交。 – PPJN

0

你还没有加入jQuery的在小提琴等都纷纷加入基本的jQuery。希望我已经按照你的意愿完成了。

function validateForm() 
 
{ 
 
    var errorMsg = '' 
 
    var errorDisplay = $("#errors"); 
 
    var errorList = $("#errorList"); 
 
    errorList.find("li").remove(); 
 
\t var name = $("#A").val(); 
 
    var age = $("#B").val(); 
 
    var city = $("#C").val(); 
 
    if (!name) { 
 
    \t errorMsg += '<li>Name</li>'; 
 
    } 
 
    
 
    if (!age) { 
 
    \t errorMsg += '<li>Age</li>'; 
 
    } 
 
    
 
    if (!city) { 
 
    \t errorMsg += '<li>City</li>'; 
 
    } 
 

 
\t if (errorMsg.length > 0) { 
 
    \t errorList.append(errorMsg); 
 
    \t errorDisplay.css("display","block"); 
 
    return false; 
 
    } 
 
    else 
 
    { 
 
    \t return true; 
 
    } 
 
}
#errors { 
 
    display:none; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.0/jquery.min.js"></script> 
 
<body> 
 

 
<div id="errors"> 
 
    <p>The following field(s) must be filled out:</p> 
 
    <ul id="errorList"> 
 
    
 
    </ul> 
 
</div> 
 

 
<form method="POST" onsubmit="return validateForm()"> 
 
    <label for="A">Name</label> 
 
    <input id="A" name="A" type="text"> 
 
    <br><br> 
 
    <label for="B">Age</label> 
 
    <input id="B" name="B" type="text"> 
 
    <br><br> 
 
    <label for="C">City</label> 
 
    <input id="C" name="C" type="text"> 
 
    <br><br> 
 
    <input type="submit" value="Submit"> 
 
</form> 
 
</body>