我已经将HTML5表单用于网站。我想,如果我使用HTML5,它会自动验证表单。但是,它并不适用于所有浏览器的所有领域。所以,我不得不使用javascript。因为我不是javascript的专家,所以我要面对很多问题。
以下是website
1)为了显示错误消息,我在输入字段旁边创建了一个div(div id =“validation”)。我通过document.getElementById从javascript中选择了div。但是,输入文件不是一个。有很多输入字段。所以,我要用它作为课程。问题在那里,我根本不能为document.getElementsByClassName编写循环/代码。基本上,我不明智地使用类来进行div#validation并使用相同的id来通过javascript进行选择。因为,像page这样的形式可以有相同类型的形式。如果有人点击编辑图标,将会有一个弹出窗体。所以,我应该使用div.validation而不是div#validation。我也担心输入id。在上面的链接,有相同的输入停留。所以,如果我通过javascipt中的表单的id来定位/选择输入,它可能无法在哪里工作 多种形式将被留下。所以,我无法理解我该怎么做。最近,我逐个测试div#validation并且它有效。
(a)所以,请至少为javascript中针对该类的两个输入文件编写代码。那么,我可以把剩下的输入字段的javascript。
我测试时的屏幕截图:
有一件事,我在任何地方都不使用“必需”,因为我正在使用javascript。但是,在尝试和尝试的时候,没有任何工作,我在HTML的输入字段的aleast中放置了“required”属性,javascript正常工作!并且至少在一个输入文件中没有要求提交,javascript不起作用!我不明白为什么会这样。我不想再使用“必需”了。
(b)当文件无效时,我想要一个红色背景,如下所示: 我怎么能用CSS或javascript做到这一点?
必要的HTML代码:
<div class="wrapper">
<header class="page_title">
<h1>Create New Job</h1>
</header>
<section class="form">
<form id="form" name="form" method="post" action="#">
<label>Job ID:</label>
<input type="text" name="job_id" id="job_id" placeholder="1">
<div id="validation"></div>
<label>Start Date:</label>
<input type="text" name="start_date" id="start_date" placeholder="mm/dd/yy">
<div id="validation"></div>
<label>Deadline:</label>
<input type="text" name="deadline" id="deadline" placeholder="mm/dd/yy">
<div id="validation"></div>
<label>Finish Date:</label>
<input type="text" name="finish_date" id="finish_date" placeholder="mm/dd/yy">
<div id="validation"></div>
<label>Budget($):</label>
<input type="text" name="budget" id="budget" placeholder="100">
<div id="validation"></div>
<label>Client ID:</label>
<input type="text" name="client_id" id="client_id" placeholder="1">
<div id="validation"></div>
<label>Client Phone Number:</label>
<input type="text" name="phone" id="phone" placeholder="01712333333">
<div id="validation"></div>
<label>Client Email address:</label>
<input type="text" name="email" id="email" placeholder="john.smith@gmail.com">
<div id="validation"></div>
<label>Bidder ID:</label>
<input type="text" name="bidder_id" id="bidder_id" placeholder="1">
<div id="validation"></div>
<label>Number of Supervisor:</label>
<select title="Supervisor" id="num_supervisor">
<option value="-1">Select</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
<div id="validation"></div>
<label>Odesk Profile Link:</label>
<input type="text" name="odesk_link" id="odesk_link" placeholder="https://www.odesk.com/jobs/Frontend-engineer">
<div id="validation"></div>
<label>Owner Type:</label>
<input type="radio" name="owner_type" id="owner_type" value="member" /><label class="text_label">Member</label>
<input type="radio" name="owner_type" id="owner_type" value="employee" /><label class="text_label">Employee</label>
<div id="validation"></div>
<div class="clear"></div>
<label>Message:</label>
<textarea id="message" name="message" rows="2" cols="20" placeholder="Your enquiry goes here"></textarea>
<div id="validation"></div>
<input type="submit" name="submit" id="submit" value="Submit" />
</form>
</section>
</div>
CSS:
html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, embed, figure, figcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary, time, mark, audio, video {
border: 0 none;
font-size: 100%;
margin: 0;
padding: 0;
vertical-align: baseline;
}
a {
text-decoration: none;
}
.clear { clear: both; }
article, aside, canvas, details, figcaption, figure, footer, header, hgroup, nav, menu, nav, section, summary {
display: block;
}
h1 {
font-size: 26px;
}
body {
background: #fff;
font-family: sans-serif;
color: #333;
font-size: 12px;
line-height: 1em;
}
.wrapper {
width: 1000px;
margin: 0 auto;
position: relative;
background: #fff;
}
header.page_title {
background: #E3E3E3;
border-radius: 7px 7px 7px 7px;
color: #333;
padding: 20px;
margin: 40px 0 0 0;
}
.form {
width: 800px;
margin: 20px 0 0 2px;
border: none;
background: #fff;
}
form {
border: none;
background: #fff;
}
.form label {
display: block;
text-align: left;
width: 200px;
float:left;
margin: 5px 0 0 20px;
font-size: 15px;
}
.form label.text_label {
width: auto;
display: inline;
margin: 5px 20px 15px 10px;
}
.form input, .form select {
float:left;
font-size:13px;
margin: 0 0 10px 0;
padding: 0;
}
.form input:required {
}
input:valid {
border: 1px solid #909090;
}
input[type=text]:invalid, input[type=date]:invalid, input[type=number]:invalid, input[type=email]:invalid, input[type=tel]:invalid, input[type=url]:invalid, textarea:invalid {
border: 1px solid #FF0000;
}
.form input[type=text], .form input[type=date], .form input[type=number], .form input[type=email], .form input[type=tel], .form input[type=url] {
width: 500px;
height: 27px;
border: 1px solid #909090;
border-radius: 3px;
}
.form input[type=file] {
width: 500px;
}
.form select {
width: 500px;
height: 27px;
line-height: 27px;
padding: 3px 0 0 0;
border: 1px solid #909090;
border-radius: 3px;
}
.form input[type="radio"] {
margin: 5px 0 0 0;
}
.form textarea {
float: left;
width: 500px;
height: 82px;
margin: 0 0 10px 0;
padding: 0;
font-size: 13px;
border: 1px solid #909090;
}
.form input[type="submit"] {
margin: 10px 0 20px 220px;
width: 100px;
height: 30px;
background: #FF6D1F;
text-align: center;
line-height: 30px;
color: #FFFFFF;
font-size: 13px;
font-weight: bold;
border: none;
box-shadow: 0 1px 3px rgba(38, 151, 72, 0.5), 0 1px 0 #9FE662 inset;
border-radius: 5px;
cursor: pointer;
}
.form input[type="submit"]:hover {
background: #FF822E;
}
input[type=text]:focus, textarea:focus, input[type=search]:focus, input[type=date]:focus, input[type=number]:focus, input[type=email]:focus, select:focus, input[type=tel]:focus, input[type=url]:focus {
background: #fff;
border-color: #595959;
-webkit-box-shadow: 0px 0px 6px 0px rgba(103, 102, 106, .7);
box-shadow: 0px 0px 6px 0px rgba(103, 102, 106, .7);
outline: none;
}
#validation {
background: #EAEAEA;
width: 165px;
height: 18px;
/*opacity: .5;*/
border: 1px solid #A69E7C;
float: left;
margin: -20px 0 0 -110px;
padding: 7px 5px 10px 10px;
border-radius: 0 0 7px 7px;
box-shadow: 0 0 2px #888;
color: #000;
line-height: 14px;
position: relative;
display: none;
}
input[type=radio] #validation {
margin-left: -10px;
}
.arrow {
width: 14px;
height: 15px;
position: absolute;
background: url(../images/arrow-down.png) no-repeat;
bottom: -15px;
left: 77px;
z-index: 120;
}
使用Javascript:
var submit = document.getElementById("submit");
submit.onclick = function() {
var job_id = document.getElementById("job_id").value;
var validation = document.getElementById("validation");
var form = document.getElementById("form");
if(job_id == "") {
validation.style.display = 'block';
validation.innerHTML = "ID cannot be left empty";
arrow = document.createElement("div");
arrow.className = 'arrow';
validation.appendChild(arrow);
}else {
validation.innerHTML = "";
validation.style.display = 'none';
}
var start_date = document.getElementById("start_date").value;
if(start_date == "") {
validation.innerHTML = "Please, Enter the date";
arrow = document.createElement("div");
arrow.className = 'arrow';
validation.appendChild(arrow);
}else {
validation.innerHTML = "";
validation.style.display = 'none';
}
var deadline = document.getElementById("deadline").value;
if(deadline == "") {
validation.innerHTML = "Please, Enter the deadline";
arrow = document.createElement("div");
arrow.className = 'arrow';
validation.appendChild(arrow);
}else {
validation.innerHTML = "";
validation.style.display = 'none';
}
var finish_date = document.getElementById("finish_date").value;
if(finish_date == "") {
validation.innerHTML = "Please, Enter the finish date";
arrow = document.createElement("div");
arrow.className = 'arrow';
validation.appendChild(arrow);
}else {
validation.innerHTML = "";
validation.style.display = 'none';
}
var budget = document.getElementById("budget").value;
if(isNaN(budget)) {
validation.innerHTML = "Enter Numeric Value here.";
arrow = document.createElement("div");
arrow.className = 'arrow';
validation.appendChild(arrow);
}else if(budget == "") {
validation.innerHTML = "Please, Enter the Budget";
arrow = document.createElement("div");
arrow.className = 'arrow';
validation.appendChild(arrow);
}else {
validation.innerHTML = "";
validation.style.display = 'none';
}
var client_id = document.getElementById("client_id").value;
if(client_id == "") {
validation.style.display = 'block';
validation.innerHTML = "ID cannot be left empty";
arrow = document.createElement("div");
arrow.className = 'arrow';
validation.appendChild(arrow);
}else {
validation.innerHTML = "";
validation.style.display = 'none';
}
var phone = document.getElementById("phone").value;
if(isNaN(phone)) {
validation.innerHTML = "Enter Numeric Value here.";
arrow = document.createElement("div");
arrow.className = 'arrow';
validation.appendChild(arrow);
}else if(phone == "") {
validation.innerHTML = "Please, Enter the Phone number";
arrow = document.createElement("div");
arrow.className = 'arrow';
validation.appendChild(arrow);
}else if(phone.length < 7) {
validation.innerHTML = "Phone Number should be at least 7 chars";
arrow = document.createElement("div");
arrow.className = 'arrow';
validation.appendChild(arrow);
}else if(phone.length > 11) {
validation.innerHTML = "Phone Number should be at best 11 chars";
arrow = document.createElement("div");
arrow.className = 'arrow';
validation.appendChild(arrow);
}else {
validation.innerHTML = "";
validation.style.display = 'none';
}
var email = document.getElementById("email").value;
var atpos=email.indexOf("@");
var dotpos=email.lastIndexOf(".");
if(email == "") {
validation.style.display = 'block';
validation.innerHTML = "Please, enter email address";
arrow = document.createElement("div");
arrow.className = 'arrow';
validation.appendChild(arrow);
}else if(atpos<1 || dotpos<atpos+2 || dotpos+2>=email.length) {
validation.innerHTML = "This is not a valid email address";
arrow = document.createElement("div");
arrow.className = 'arrow';
validation.appendChild(arrow);
}
else {
validation.innerHTML = "";
validation.style.display = 'none';
}
var bidder_id = document.getElementById("bidder_id").value;
if(bidder_id == "") {
validation.style.display = 'block';
validation.innerHTML = "ID cannot be left empty";
arrow = document.createElement("div");
arrow.className = 'arrow';
validation.appendChild(arrow);
}else {
validation.innerHTML = "";
validation.style.display = 'none';
}
var num_supervisor = document.getElementById("num_supervisor").value;
if(num_supervisor == "-1") {
validation.style.display = 'block';
validation.innerHTML = "Please, select";
arrow = document.createElement("div");
arrow.className = 'arrow';
validation.appendChild(arrow);
}else {
validation.innerHTML = "";
validation.style.display = 'none';
}
var odesk_link = document.getElementById("odesk_id").value;
var tomatch= /^(ht|f)tps?:\/\/[a-z0-9-\.]+\.[a-z]{2,4}\/?([^\s<>\#%"\,\{\}\\|\\\^\[\]`]+)?$/;
if(odesk_link == "") {
validation.style.display = 'block';
validation.innerHTML = "Please, Enter the url";
arrow = document.createElement("div");
arrow.className = 'arrow';
validation.appendChild(arrow);
} else if (tomatch.test(odesk_link)) {
validation.innerHTML = "";
validation.style.display = 'none';
return true;
}else {
validation.style.display = 'block';
validation.innerHTML = "This is not valid url";
arrow = document.createElement("div");
arrow.className = 'arrow';
validation.appendChild(arrow);
return false;
}
var owner_type = document.getElementById("owner_type").value;
if(owner_type == "") {
validation.style.display = 'block';
validation.style.marginLeft = '0';
validation.innerHTML = "Please, write something";
arrow = document.createElement("div");
arrow.className = 'arrow';
validation.appendChild(arrow);
}else {
validation.innerHTML = "";
validation.style.display = 'none';
}
var message = document.getElementById("message").value;
if(message == "") {
validation.style.display = 'block';
validation.innerHTML = "Please, write something";
arrow = document.createElement("div");
arrow.className = 'arrow';
validation.appendChild(arrow);
}else {
validation.innerHTML = "";
validation.style.display = 'none';
}
}
(c)用于单选按钮,url链接和textarea输入的javascript未显示正确的错误消息。我认为,该部分的代码是可以的,但问题是什么,我不明白。
答案 0 :(得分:0)
如果你可以使用jQuery作为js库,那么这里有一个解决方案[for a)和b)]: http://jsfiddle.net/6fLNz/4/
一些意见:
!==
或===
进行评估的条件构建特定函数。input.on('focusout', function()
更改为$('#submit').on('click', function()
。jQuery函数供参考:
$(document).ready(function() {
// First define user inputs
var inputs = [];
inputs[0] = $('#job_id'); // Job Id input
inputs[1] = $('#start_date'); // Start date input
inputs[2] = $('#deadline'); // Deadline input
// Add other inputs here like so => inputs[3] = $('#<input id>');
// Define the errors (error indexes must be the same as their inputs' indexes, eg errors[0] for inputs[0])
var errors = [];
errors[0] = 'ID cannot be left empty'; // Job Id error
errors[1] = 'Please enter the date'; // start date error
errors[2] = 'Please enter the deadline'; // deadline error
// Add other errors here like so => errors[3] = $('#<input id>');
// These are the different validation patterns
var expressions = [];
expressions[0] = '';
expressions[1] = /regex/ ;
// Template function with event handlers
var showFormValidation = function showFormValidation(input, error, expression) {
input.on('focusout', function() {
if(input.val() == expression) {
$(this).next('.validation').show();
$(this).next('.validation').html(error);
$(this).css({'box-shadow': '0 0 3px red',
'-moz-boxshadow': '0 0 3px red',
'-webkit-boxshadow': '0 0 3px red',
'-o-boxshadow': '0 0 3px red',
'border': '1px solid red'
});
} else if(input.val() != expression) {
$(this).next('.validation').hide();
$(this).css({'box-shadow': 'none',
'-moz-boxshadow': 'none',
'-webkit-boxshadow': 'none',
'-o-boxshadow': 'none',
'border': '1px solid grey'
});
}
});
};
// This function will show the form validation for all input, if the input is == ''
for(i=0; i < errors.length; i++) {
showFormValidation( inputs[i], errors[i], expressions[0]);
}
});
答案 1 :(得分:0)
我发布了一个新的答案,因为这个答案更加具体和复杂。但请阅读粗体注释:
我在这里编写的代码几乎可以定义为jQuery错误验证插件。最终,开发一个需要高级错误显示功能的多价应用程序。其他人,你应该真正学习一个javascript框架(比如Ext.js,jQuery,jQuery UI [框架框架!],YUI等等)或掌握javascript到至少高级。 < / p>
新功能的作用:
现在需要付出代价:
对于每个函数启动,您必须指定10个参数,如下所示:
function showFormValidation(input, errorBlank, minLength, errorminLength, maxLength, errormaxLength, find, errorFind, regex, errorRegex)
//
封闭的正则表达式模式,find应该是一个字符串(例如'mail')例如,请查看本文中嵌入代码的最后3行。
这是新的jQuery代码(它适用于小提琴的3个第一个输入:http://jsfiddle.net/6fLNz/5/
$(document).ready(function() {
// First define user inputs
var inputs = [];
inputs[0] = $('#job_id'); // Job Id input
inputs[1] = $('#start_date'); // Start date input
inputs[2] = $('#deadline'); // Deadline input
// Add other inputs here like so => inputs[3] = $('#<input id>');
// Define the errors (error indexes must be the same as their inputs' indexes, eg errors[0][0][0] for inputs[0])
var errors = [];
errors[0] = [];
errors[1] = [];
errors[2] = [];
var blank = 0;
var length = 1;
var indexof = 2;
// errors when input = empty
errors[blank][0] = 'ID cannot be left empty'; // Job Id error
errors[blank][1] = 'Please enter the date'; // start date error
errors[blank][2] = 'Please enter the deadline'; // deadline error
errors[blank][3] = 'You haven\'nt chosen an ownertype'; // ownertype radiobutton error
// errors when not enough chars or too many chars
errors[length][0] = 'Your message must be at least x characters in length.';
errors[length][1] = 'Your message must be at most x characters in length.';
// errors when input doesn't contain a certain string
errors[indexof][0] = 'Your message doesn\'t contain the necessary characters';
// Template function with event handlers
var showFormValidation = function showFormValidation(input, errorBlank, minLength, errorminLength, maxLength, errormaxLength, find, errorFind, regex, errorRegex) {
input.on('focusout', function() {
var errorVisible = function errorVisible(error) {
if(error !== null) {
input.next('.validation').show();
input.next('.validation').html(error);
input.css({'box-shadow': '0 0 3px red',
'-moz-boxshadow': '0 0 3px red',
'-webkit-boxshadow': '0 0 3px red',
'-o-boxshadow': '0 0 3px red',
'border': '1px solid red'
});
}
};
var errorHidden = function errorHidden() {
input.next('.validation').hide();
input.css({'box-shadow': 'none',
'-moz-boxshadow': 'none',
'-webkit-boxshadow': 'none',
'-o-boxshadow': 'none',
'border': '1px solid grey'
});
};
if(input.val() == '') { // shows error if input is empty
errorVisible(errorBlank);
} else if(input.val() != '') {
errorHidden();
if(input.val().length < minLength && minLength != null) { // shows error if input is shorter than 'minLength' characters
errorVisible(errorminLength);
} else if(input.val().length >= minLength || minLength == null) {
errorHidden();
if(input.val().length > maxLength && maxLength != null) { // shows error if input is longer than 'maxLength' characters
errorVisible(errormaxLength);
} else if (input.val().length <= maxLength || maxLength == null) {
errorHidden();
if(input.val().indexOf(find) == -1 && find != null) { // shows error if string 'find' is not found in the input.val()
errorVisible(errorFind);
} else if(input.val().indexOf(find) != -1 || find == null) {
errorHidden();
if(!input.val().match(regex) && regex != null) { // shows error if string doesn't follow a certain regex pattern
errorVisible(errorRegex);
} else if(input.val().match(regex) || regex == null) {
errorHidden();
}
};
};
};
};
});
};
showFormValidation(inputs[0], errors[blank][0], 4, errors[length][0], null, null, 'mailto', errors[indexof][0], null, null );
showFormValidation(inputs[1], errors[blank][1], 6, errors[length][0], 6, errors[length][1], null, null, null, null );
showFormValidation(inputs[2], errors[blank][2], null, null, null, null, null, null, /\//i, 'wrong regex');
});
我选择将错误消息集中放在数组中,但您也可以直接输入字符串作为函数参数。
干杯。