2017-06-06 53 views
0

我是新来的JavaScript和我有点卡住...旁边显示输入字段的错误信息,如果输入字段为空

我有一个表格,我试图产生的错误信息输入字段旁边是空白的或者没有包含正确的信息。

不幸的是没有做任何事情... 感谢您的帮助!

我的HTML:

<form name="user_details" method="post" onsubmit="return checkform()"> 
    <table id="form_table"> 
     <tr> 
      <td class="form_cell"><label for="first_name">First Name:</label></td> 
      <td class="form_cell"><input type="text" id="first_name">*</td> 
      <td id="error_first_name">The first name field needs to contain at least one character.</td> 
     </tr> 
     <tr> 
      <td class="form_cell"><label for="surname">Surname:</label></td> 
      <td class="form_cell"><input type="text" id="surname">*</td> 
      <td id="error_surname">The surname field needs to contain at least one character.</td> 
     </tr> 
     <tr> 
      <td class="form_cell"><label for="address">Address:</label></td> 
      <td class="form_cell"><input type="text" id="address">*</td> 
      <td id="error_address">The address field needs to contain at least one character.</td> 
     </tr> 
     <tr> 
      <td class="form_cell"><label for="city">City:</label></td> 
      <td class="form_cell"><input type="text" id="city">*</td> 
      <td id="error_city">The city field needs to contain at least one character.</td> 
     </tr> 
     <tr> 
      <td class="form_cell"><label for="post_code">Post Code:</label></td> 
      <td class="form_cell"><input type="text" id="post_code">*</td> 
      <td id="error_post_code">The post code field needs to contain a number.</td> 
     </tr> 
     <tr> 
      <td class="form_cell"><label for="email">Email:</label></td> 
      <td class="form_cell"><input type="email" id="email">*</td> 
      <td id="error_email">The email field needs to contain an email address.</td> 
     </tr> 
     <tr> 
      <td class="form_cell"><label for="phone_number">Phone Number:</label></td> 
      <td class="form_cell"><input type="text" id="phone_number"></td> 
     </tr> 
    </table> 
     <input type="submit"><input type=reset> 
    </form> 

我的javascript:

function checkform() { 
var ok = true, 
    first_name, 
    surname, 
    address, 
    city, 
    post_code, 
    email; 

if (document.getElementById("first_name").value == "") { 
    document.getElementById("first_name").style.borderColor = "red"; 
    $("#error_first_name").show(); 
    ok = false; 
} 

else if (document.getElementById("surname").value == "") { 
    document.getElementById("surname").style.borderColor = "red"; 
    $("#error_surname").show(); 
    ok = false; 
} 

else if (document.getElementById("address").value == "") { 
    document.getElementById("address").style.borderColor = "red"; 
    $("#error_address").show(); 
    ok = false; 
} 

else if (document.getElementById("city").value == "") { 
    document.getElementById("city").style.borderColor = "red"; 
    $("#error_city").show(); 
    ok = false; 
} 

else if (document.getElementById("post_code").value == "") { 
    document.getElementById("post_code").style.borderColor = "red"; 
    $("#error_post_code").show(); 
    ok = false; 
} 

else if (document.getElementById("email").value == "") { 
    document.getElementById("email").style.borderColor = "red"; 
    $("#error_email").show(); 
    ok = false; 
} 

else if (!/^[A-Za-z]+$/.test(document.getElementById("first_name").value)) { 
    document.getElementById("first_name").style.borderColor = "red"; 
    ok = false; 
} 

else if (!/^[A-Za-z]+$/.test(document.getElementById("surname").value)) { 
    document.getElementById("surname").style.borderColor = "red"; 
    ok = false; 
} 

else if (!/^[A-Za-z]+$/.test(document.getElementById("address").value)) { 
    document.getElementById("address").style.borderColor = "red"; 
    ok = false; 
} 

else if (!/^[A-Za-z][0-9]+$/.test(document.getElementById("city").value)) { 
    document.getElementById("city").style.borderColor = "red"; 
    ok = false; 
} 

else if (!/^[0-9]+$/.test(document.getElementById("post_code").value)) { 
    document.getElementById("post_code").style.borderColor = "red"; 
    ok = false; 
} 

else if (!/\[email protected]\S+/.test(document.getElementById("email").value)) { 
    document.getElementById("first_name").style.borderColor = "red"; 
    ok = false; 
} 


else { 
    return ok; 
} 

}

我的CSS:

#error_first_name { 
display: none; 
} 

#error_surname { 
display: none; 
} 

#error_address { 
display: none; 
} 

#error_city { 
display: none; 
} 

#error_post_code { 
display: none; 
} 

#error_email { 
display: none; 
} 
+0

不要把它放在其他条件!它将返回所有你的条件作为一个结果,所以放在外面如果其他条件'返回正常;'删除'else {}' –

回答

0

你的代码有几个问题,你可以在很多因素中改善它,见下文。

  1. 您不正确地关闭功能checkform(),您缺少一个右括号。
  2. 您从功能要return ok不管是什么,所以你应该忽略else块,例如:

    function checkform() { 
        var ok = true, 
        [ omitted for brevity ] 
        else if (!/\[email protected]\S+/.test(document.getElementById("email").value)) { 
         document.getElementById("first_name").style.borderColor = "red"; 
         ok = false; 
        } 
    
        return ok; 
    } 
    
  3. 你可能要检查的形式,所有的错误提交。目前,您的代码所做的是在每个字段中查找错误,并在遇到错误时显示错误消息并停止查找其他错误。要改变它,你应该放弃else if赞成只是一系列if,像这样:

    function checkform() { 
        var ok = true, 
        [ omitted for brevity ] 
    
        if (document.getElementById("first_name").value == "") { 
         document.getElementById("first_name").style.borderColor = "red"; 
         $("#error_first_name").show(); 
         ok = false; 
        } // See here - it will check each field no matter what 
        if (document.getElementById("surname").value == "") { 
         document.getElementById("surname").style.borderColor = "red"; 
         $("#error_surname").show(); 
         ok = false; 
        } 
        return ok; 
    } 
    
  4. 如果错误消失,您没有重置场风格。例如 - 用户试图提交一个空的表单,所以所有的字段都表示错误。然后用户填写名字并提交,但错误仍然显示,因为您从不重置它。您可以为每个支票添加一个else并相应采取行动。

  5. 您应该使用===的字符串比较(见this answer
  6. 我看你使用jQuery,你不应该混的“裸” JS(如document.getElementById使用jQuery代码,因为它使代码混乱。使用jQuery你可以得到一个字段的值,像这样:$('<css selector here>').val(),例如$('#first_name').val(),你可以改变风格,做$('<css selector>').css('<property', '<value>')
  7. 你不应该混合演示和代码(比如设置样式),而不是添加和删除一个CSS类和风格是你的样式表,你可以用类似于jQuery的方式添加类:$('<css selector').addClass('<you class name')并将其类似地删除$('<css selector').removeClass('<you class name')
  8. 你应该在你的脚本文件中附加你的事件处理程序(如onsubmit),这样你就不会把事件处理程序和JS中的HTML混杂在只有HTML调用的很多函数中。这可以提高代码的可读性。您可以将您的事件处理程序的jQuery像这样:

    $(function() { // This wait's for document.ready. 
        // It's required to attach event in script 
        // because scripts are ran before browser parses HTML 
        $('#formId').submit(function() { 
         return false; // This gets called on form submit 
        }); 
    }); 
    

我创建了一个plunker that demonstrates all of my points

欲了解更多信息,你应该看到jQuery website和计算器等问题。

+0

非常感谢你Enbyted!到昨天为止没有任何意义,但感谢您的详细解释,我现在知道我在做什么:) – Marie

1

应用return ok在功能的结束也

function checkform() { 
 
    var ok = true, 
 
    first_name, 
 
    surname, 
 
    address, 
 
    city, 
 
    post_code, 
 
    email; 
 

 
    if (document.getElementById("first_name").value == "") { 
 
    document.getElementById("first_name").style.borderColor = "red"; 
 
    $("#error_first_name").show(); 
 
    ok = false; 
 
    } else if (document.getElementById("surname").value == "") { 
 
    document.getElementById("surname").style.borderColor = "red"; 
 
    $("#error_surname").show(); 
 
    ok = false; 
 
    } else if (document.getElementById("address").value == "") { 
 
    document.getElementById("address").style.borderColor = "red"; 
 
    $("#error_address").show(); 
 
    ok = false; 
 
    } else if (document.getElementById("city").value == "") { 
 
    document.getElementById("city").style.borderColor = "red"; 
 
    $("#error_city").show(); 
 
    ok = false; 
 
    } else if (document.getElementById("post_code").value == "") { 
 
    document.getElementById("post_code").style.borderColor = "red"; 
 
    $("#error_post_code").show(); 
 
    ok = false; 
 
    } else if (document.getElementById("email").value == "") { 
 
    document.getElementById("email").style.borderColor = "red"; 
 
    $("#error_email").show(); 
 
    ok = false; 
 
    } else if (!/^[A-Za-z]+$/.test(document.getElementById("first_name").value)) { 
 
    document.getElementById("first_name").style.borderColor = "red"; 
 
    ok = false; 
 
    } else if (!/^[A-Za-z]+$/.test(document.getElementById("surname").value)) { 
 
    document.getElementById("surname").style.borderColor = "red"; 
 
    ok = false; 
 
    } else if (!/^[A-Za-z]+$/.test(document.getElementById("address").value)) { 
 
    document.getElementById("address").style.borderColor = "red"; 
 
    ok = false; 
 
    } else if (!/^[A-Za-z][0-9]+$/.test(document.getElementById("city").value)) { 
 
    document.getElementById("city").style.borderColor = "red"; 
 
    ok = false; 
 
    } else if (!/^[0-9]+$/.test(document.getElementById("post_code").value)) { 
 
    document.getElementById("post_code").style.borderColor = "red"; 
 
    ok = false; 
 
    } else if (!/\[email protected]\S+/.test(document.getElementById("email").value)) { 
 
    document.getElementById("first_name").style.borderColor = "red"; 
 
    ok = false; 
 
    } else { 
 
    return ok; 
 
    } 
 
    return ok; 
 
}
#error_first_name { 
 
    display: none; 
 
} 
 

 
#error_surname { 
 
    display: none; 
 
} 
 

 
#error_address { 
 
    display: none; 
 
} 
 

 
#error_city { 
 
    display: none; 
 
} 
 

 
#error_post_code { 
 
    display: none; 
 
} 
 

 
#error_email { 
 
    display: none; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<form name="user_details" method="post" onsubmit="return checkform()"> 
 
    <table id="form_table"> 
 
    <tr> 
 
     <td class="form_cell"><label for="first_name">First Name:</label></td> 
 
     <td class="form_cell"><input type="text" id="first_name">*</td> 
 
     <td id="error_first_name">The first name field needs to contain at least one character.</td> 
 
    </tr> 
 
    <tr> 
 
     <td class="form_cell"><label for="surname">Surname:</label></td> 
 
     <td class="form_cell"><input type="text" id="surname">*</td> 
 
     <td id="error_surname">The surname field needs to contain at least one character.</td> 
 
    </tr> 
 
    <tr> 
 
     <td class="form_cell"><label for="address">Address:</label></td> 
 
     <td class="form_cell"><input type="text" id="address">*</td> 
 
     <td id="error_address">The address field needs to contain at least one character.</td> 
 
    </tr> 
 
    <tr> 
 
     <td class="form_cell"><label for="city">City:</label></td> 
 
     <td class="form_cell"><input type="text" id="city">*</td> 
 
     <td id="error_city">The city field needs to contain at least one character.</td> 
 
    </tr> 
 
    <tr> 
 
     <td class="form_cell"><label for="post_code">Post Code:</label></td> 
 
     <td class="form_cell"><input type="text" id="post_code">*</td> 
 
     <td id="error_post_code">The post code field needs to contain a number.</td> 
 
    </tr> 
 
    <tr> 
 
     <td class="form_cell"><label for="email">Email:</label></td> 
 
     <td class="form_cell"><input type="email" id="email">*</td> 
 
     <td id="error_email">The email field needs to contain an email address.</td> 
 
    </tr> 
 
    <tr> 
 
     <td class="form_cell"><label for="phone_number">Phone Number:</label></td> 
 
     <td class="form_cell"><input type="text" id="phone_number"></td> 
 
    </tr> 
 
    </table> 
 
    <input type="submit"><input type=reset> 
 
</form>

1

我想强调几点基于代码

  1. 的错误,是因为你没有在你的代码中包含一个jQuery版本。
  2. 如果你使用的是jQuery,那么使用它来缩短你的代码。
  3. 请勿重复使用class代替CSS中的每个id相同的属性。
  4. 检查空和使用||

function checkform() { 
 
    var ok = true, 
 
    first_name = $.trim($("#first_name").val()), 
 
    surname = $.trim($("#surname").val()), 
 
    address = $.trim($("#first_name").val()), 
 
    city = $.trim($("#city").val()), 
 
    post_code = $.trim($("#post_code").val()), 
 
    email = $.trim($("#email").val()); 
 
    $('input.bdred').removeClass('bdred'); 
 
    $('.errors').hide(); 
 
    if (!first_name || !/^[A-Za-z]+$/.test(first_name)) { 
 
    $("#first_name").addClass('bdred'); 
 
    $("#error_first_name").show(); 
 
    ok = false; 
 
    } else if (!surname || !/^[A-Za-z]+$/.test(surname)) { 
 
    $("#surname").addClass('bdred'); 
 
    $("#error_surname").show(); 
 
    ok = false; 
 
    } else if (!address || !/^[A-Za-z]+$/.test(address)) { 
 
    $("#address").addClass('bdred'); 
 
    $("#error_address").show(); 
 
    ok = false; 
 
    } else if (!city || !/^[A-Za-z][0-9]+$/.test(city)) { 
 
    $("#city").addClass('bdred'); 
 
    $("#error_city").show(); 
 
    ok = false; 
 
    } else if (!post_code || !/^[0-9]+$/.test(post_code)) { 
 
    $("#post_code").addClass('bdred'); 
 
    $("#error_post_code").show(); 
 
    ok = false; 
 
    } else if (!email || !/\[email protected]\S+/.test(email)) { 
 
    $("#email").addClass('bdred'); 
 
    $("#error_email").show(); 
 
    ok = false; 
 
    } 
 
    return ok; 
 
}
.errors { 
 
    display: none; 
 
} 
 

 
.bdred { 
 
    border-color: red 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<form name="user_details" method="post" onsubmit="return checkform();"> 
 
    <table id="form_table"> 
 
    <tr> 
 
     <td class="form_cell"><label for="first_name">First Name:</label></td> 
 
     <td class="form_cell"><input type="text" id="first_name">*</td> 
 
     <td id="error_first_name" class="errors">The first name field needs to contain at least one character.</td> 
 
    </tr> 
 
    <tr> 
 
     <td class="form_cell"><label for="surname">Surname:</label></td> 
 
     <td class="form_cell"><input type="text" id="surname">*</td> 
 
     <td id="error_surname" class="errors">The surname field needs to contain at least one character.</td> 
 
    </tr> 
 
    <tr> 
 
     <td class="form_cell"><label for="address">Address:</label></td> 
 
     <td class="form_cell"><input type="text" id="address">*</td> 
 
     <td id="error_address" class="errors">The address field needs to contain at least one character.</td> 
 
    </tr> 
 
    <tr> 
 
     <td class="form_cell"><label for="city">City:</label></td> 
 
     <td class="form_cell"><input type="text" id="city">*</td> 
 
     <td id="error_city" class="errors">The city field needs to contain at least one character.</td> 
 
    </tr> 
 
    <tr> 
 
     <td class="form_cell"><label for="post_code">Post Code:</label></td> 
 
     <td class="form_cell"><input type="text" id="post_code">*</td> 
 
     <td id="error_post_code" class="errors">The post code field needs to contain a number.</td> 
 
    </tr> 
 
    <tr> 
 
     <td class="form_cell"><label for="email">Email:</label></td> 
 
     <td class="form_cell"><input type="email" id="email">*</td> 
 
     <td id="error_email" class="errors">The email field needs to contain an email address.</td> 
 
    </tr> 
 
    <tr> 
 
     <td class="form_cell"><label for="phone_number">Phone Number:</label></td> 
 
     <td class="form_cell"><input type="text" id="phone_number"></td> 
 
    </tr> 
 
    </table> 
 
    <input type="submit"><input type=reset> 
 
</form>

0

如果你使用jQuery的,可以缩短你的代码使阵列相同的模式组,并使用.each

在单一条件的正则表达式
function checkform() { 
    var ok = true; 
    var character = [["first_name","surname","address"],["/^[A-Za-z]+$/"]]; 
    var city = [["city"],["/^[A-Za-z][0-9]+$/"]]; 
    var post = [["post_code"],["/^[0-9]+$/"]]; 
    var email = [["email"],["/\[email protected]\S+/"]]; 
    $("form[name='user_details'] input").each(function(){ 
     if($.inArray(this.id,character[0]) >= 0) { 
      ok = showError(this,character[1]);  
     } else if(this.id == city[0]) { 
      ok = showError(this,city[1]); 
     } else if(this.id == post[0]) { 
      ok = showError(this,post[1]); 
     } else if(this.id == email[0]) { 
      ok = showError(this,email[1]); 
     } 
    }); 
    return ok; 
} 
function showError(t,p) { 
    if(t.value == "" || !p.test(t.value)){ 
     $(t).css("borderColor","red"); 
     $("#error_"+t.id).show(); 
     return false; 
    } 
    return true; 
} 
相关问题