Javascript只验证我的第一个输入
Javascript only validates my first input
我是Javascript的新手,我正在尝试验证我的表单,但由于某些原因,我的代码只考虑了第一个输入。
如果我尝试插入 1 个字符的输入名称,它会给我正确的警报框,但如果我插入 1 个字符的输入姓氏,它不会显示相同的警报框。
我看不出我的错误...为什么它只处理第一个输入?有人可以帮助我吗?
.HTML
<form action="registration" name="registrationForm" method="post" onsubmit="return formValidation();">
<p> Nome <p>
<input type="text" class="registrationInput" name="nome" placeholder="Nome" required maxlength="45"/>
<p> Cognome </p>
<input type="text" class="registrationInput" name="cognome" placeholder="Cognome" required maxlength="45"/>
</form>
JAVASCRIPT
function formValidation(){
var name = document.registrationForm.nome;
var surname = document.registrationForm.cognome;
if(validateName(name)){
if(validateSurname(surname)) {
}
}
return false;
}
function validateName(name){
if(name.value.length <= 3 || name.value.length >=45) {
window.alert("Il nome non è corretto. Deve essere lungo da un minimo di 4 a un massimo di 45 caratteri");
name.focus();
return false;
}
return true;
}
function validateSurname(surname) {
if(surname.value.length <= 3 || surname.value.length >=45) {
window.alert("Il cognome non è corretto. Deve essere lungo da un minimo di 4 a un massimo di 45 caratteri");
surname.focus();
return false;
}
return true;
}
问题就在这里
if(validateName(name)){
if(validateSurname(surname)) {
}
}
错误是,如果第一个函数调用 validateName(name) 返回 false,则第二个调用将被忽略。也许您必须检查分开的输入。
if(validateName(name)){
}
if(validateSurname(surname)) {
}
阅读评论后更新
像标志一样容易知道失败的输入是什么
var flag = true;
if(!(validateName(name) && flag)){
flag = false;
alert("Input 1 fails");
}
if(!(validateSurname(surname) && flag)){
flag = false;
alert("Input 2 fails");
}
if(validateName(name)){
if(validateSurname(surname))
当且仅当validateName
返回时true
validateSurname
运行。如果始终无条件地验证两者,则不得有条件地嵌套它们:
var valName = validateName(name),
valSurname = validateName(surname);
return valName && valSurname;
您尝试验证字段是非常无辜的。我建议您尝试一下:
function formValidation(){
var nome = document.getElementsByName('nome')[0];
var cognome = document.getElementsByName('cognome')[0];
if(!validateInput(nome)){
//input nome validation is false
alert("Il nome non è corretto. Deve essere lungo da un minimo di 4 a un massimo di 45 caratteri");
nome.focus();
return;
}
if(!validateInput(cognome)){
//input cognome validation is false
alert("Il cognome non è corretto. Deve essere lungo da un minimo di 4 a un massimo di 45 caratteri");
cognome.focus();
return;
}
}
function validateInput(input){
//input parameter MUST be a DOM Element
var input_name = input.getAttribute("name");
//Validation of "nome" input
if(input_name == "nome"){
//Minimum length is 4 and maximum length is 45
if(input.value.length > 3 && input.value.length < 46){
return true; //This will break execution and return true
}
}
//Validation of "cognome" input
else if(input_name == "cognome"){
//Minimum length is 4 and maximum length is 45
if(input.value.length > 3 && input.value.length < 46) {
return true; //This will break execution and return true
}
//This input validation is exactly the same as
//nome input validation, so you should ommit the
//code duplication and use the same validation for
//both fields.
}
//Add more field validations if needed...
//. . .
//If the input passed as a parameter doesn't pass the validation
//this function will return false.
return false;
}
我也强烈建议您使用jQuery进行表单验证,因为它简化了很多,请比较一下自己:
function formValidation(){
var passedvalidation = true;
//Iterate on all registration inputs
$(".registrationInput").each(function(){
var input = $(this); //Get the input object
var input_name = $(input).attr("name"); //Get the input name
if(input_name == "nome"){
//Validate "nome" input
//If validation is false show message, change input color, etc...
passedvalidation = false;
}
else if(input_name == "cognome"){
//Validate "cognome" input
//If validation is false show message, change input color, etc...
passedvalidation = false;
}
});
return passedvalidation;
}
//Call form validation function and that's all
if(formValidation()){
//send post to process the form
}
函数 formValidation() 在验证正常时不返回任何内容。
在验证姓氏之前,您需要返回 true。
...
if(validateName(name)){
if(validateSurname(surname)) {
return true; // <-- YOU NEED TO ADD THIS
}
}
return false;
...
希望这对你:)有所帮助
相关文章:
- NodeJS readline有时会打印回第一个输入行(但并不总是,看起来是随机的)
- 将焦点设置在下拉切换的角度 js 上的第一个输入字段上
- 只能使用第一个输入框输入注释.他们不为其余的工作
- 单选按钮仅显示第一个输入,如何获得所需的输入
- 将焦点设置在带有错误消息的第一个输入元素上,并将包含它的 TabStrip 选项卡设置为活动状态
- Javascript onclick 将第二个输入框的值更改为与第一个输入框的值相同
- 填充 HTML,选择“使用第一个输入标记”
- 如何聚焦对话框中的第一个输入框
- Javascript只验证我的第一个输入
- 如何在用户完成第一个输入文本的键入后设置和聚焦最后一个输入文本
- DurandalJs:一种通用解决方案,用于将焦点放在组合视图上的第一个输入元素上
- 从具有特定类的第一个输入中获取父窗体元素
- WebBrowser注入Javascript将焦点设置为第一个输入框
- 选择第一个输入,但不要't选择类型=隐藏
- 关注克隆行后的第一个输入
- 为什么所有图像都更改为第一个输入
- 检查第一个输入
- 我在html中有两个输入字段,我在想如何将第一个输入字段的值自动转换为下一个输入字段
- jQuery根据第一个输入的文本框值填充数组命名的表单字段
- 只有在没有输入集中的情况下,才将第一个输入集中在负载上