我是JavaScript的新手,我的表单验证工作,但在提交时即使验证了也要验证用户名。这是我的代码
function validate_form(form)
{
var complete=false;
if(complete)
{
clear_all();
complete = checkUsernameForLength(form.username.value);
}
if(complete)
{
clear_all();
complete = checkaddress(form.country.value);
}
if(complete)
{
clear_all();
complete = checkaddress(form.country.value);
}
if(complete)
{
clear_all();
complete = checkEmail(form.email.value);
}
if (complete)
{
clear_all();
complete = checkphone(form.phone.value);
}
}
function clear_all()
{
document.getElementById('usernamehint').style.visibility= 'hidden';
/*.basicform.usernamehint.style.backgroundColor='white';*/
document.getElementById("countrthint").style.visibility= 'hidden';
/*document.basicform.countrthint.style.backgroundColor='white';*/
document.getElementById("subhint").style.visibility= 'hidden';
/*document.basicform.subject.style.backgroundColor='white';*/
document.getElementById("phonehint").style.visibility= 'hidden';
/*document.basicform.phone.style.backgroundColor='white';*/
document.getElementById("emailhint").style.visibility= 'hidden';
/*document.basicform.email.style.backgroundColor='white';*/
}
heres the functions
function checkUsernameForLength(whatYouTyped)
{
var fieldset = whatYouTyped.parentNode;
var txt = whatYouTyped.value;
if (txt.length > 2) {
fieldset.className = "welldone";
return true;
}
else
{
fieldset.className = "";
return false;
}
}
function checkEmail(whatYouTyped)
{
var fieldset = whatYouTyped.parentNode;
var txt = whatYouTyped.value;
if (/^w+([.-]?w+)*@w+([.-]?w+)*(.w{2,3})+$/.test(txt))
{
fieldset.className = "welldone";
}
else
{
fieldset.className = "";
}
}
function checkaddress(whatYouTyped)
{
var fieldset = whatYouTyped.parentNode;
var txt = whatYouTyped.value;
if (txt.length > 3 && txt.length <10)
{
fieldset.className = "welldone";
}
else
{
fieldset.className = "";
}
}
function checkphone(whatYouTyped)
{
var fieldset = whatYouTyped.parentNode;
var txt = whatYouTyped.value;
if ( /^((+d{1,3}(-| )?(?d)?(-| )?d{1,5})|((?d{2,6})?))(-| )?(d{3,4})(-| )?(d{4})(( x| ext)d{1,5}){0,1}$/.test(txt)) {
fieldset.className = "welldone";
}
else
{
fieldset.className = "FAILS";
}
}
function addLoadEvent(func)
{
var oldonload = window.onload;
if (typeof window.onload != 'function')
{
window.onload = func;
} else {
window.onload = function()
{
oldonload();
func();
}
}
}
function prepareInputsForHints()
{
var inputs = document.getElementsByTagName("input");
for (var i=0; i<inputs.length; i++)
{
inputs[i].onfocus = function ()
{
this.parentNode.getElementsByTagName("span")[0].style.display = "inline";
}
inputs[i].onblur = function ()
{
this.parentNode.getElementsByTagName("span")[0].style.display = "none";
}
}
}
addLoadEvent(prepareInputsForHints);
and heres my form
<form form method="post" action="mailto:s00103684@mail.itsligo.ie" name="basicform" id="basicform" >
<fieldset>
<label for="username">Name:</label>
<input type="text" id="username" onkeyup="checkUsernameForLength(this);" />
<span class="hint" id="usernamehint">This Field Must Not Be Left Blank !</span>
</fieldset>
<fieldset>
<label for="country">Country:</label>
<input type="text" id="country" onkeyup="checkaddress(this);" />
<span class="hint" id="countryhint">This Field Must Not Be Left Blank !</span>
</fieldset>
<fieldset>
<label for="Subject">Subject:</label>
<input type="text" id="subject" onkeyup="checkaddress(this);" />
<span class="hint" id="subhint">Please Indicate What Your Interest Is !</span>
</fieldset>
<fieldset>
<label for="Phone">Phone:</label>
<input type="text" id="Phone" onkeyup="checkphone(this);" />
<span class="hint" id="phonehint">This Feld Must Be Numeric Values Only !</span>
</fieldset>
<fieldset>
<label for="email">Email Address:</label>
<input type="text" id="email" onkeyup="checkEmail(this);" />
<span class="hint" id="emailhint">You can enter your real address without worry - we don't spam!</span>
</fieldset>
<input value="send" type="button" onclick="validate_form(this.form)"/>
<br /><br /> <br /><br />
</form>
请为业余编码员指出正确的方向谢谢
就像其他人说的那样,您试图在条件中访问用户名,其中条件为总是 false。您将complete=false
设置为start,然后尝试查看它是否为真。
function validate_form(form)
{
clear_all();
var complete = checkUsernameForLength(form.username.value);
if(complete)
{
complete = checkaddress(form.country.value);
}
if(complete)
{
complete = checkEmail(form.email.value);
}
if (complete)
{
complete = checkphone(form.phone.value);
}
}
另外,在声明用户名验证有效之后,您应该在其他方法中返回一个布尔值=)
EDIT:另外,检查别人说的错误是一个高优先级的问题。
EDIT2:我转身看到一个重复的条件。现在我把它删掉了。要继续以这种方式使用if(complete),还应该做以下更改:
function checkaddress(whatYouTyped)
{
var fieldset = whatYouTyped.parentNode;
var txt = whatYouTyped.value;
if (txt.length > 3 && txt.length <10)
{
fieldset.className = "welldone";
return true; // <-- this change
}
else
{
fieldset.className = "";
return false; // <-- and this change
}
}
还可以在需要时将其他方法更改为返回true和false
别慌。
每个人都必须从某个地方开始,当你刚刚开始学习的时候,这是非常令人沮丧的。
在回答这个问题时,我们不仅需要看你的JavaScript,还需要看HTML。
你没有提交输入类型;而不是选择一个普通的按钮。这不一定是个问题,除非JavaScript中没有任何地方真正提交表单。这意味着每次有人单击"Send"按钮时,它将触发您定义的validate_form()函数,但不会对它做任何进一步的操作。让我们做一些修改:
将按钮替换为提交输入:
<input value="send" type="submit" />
接下来,将以下代码添加到表单标记中,以便我们定义当用户尝试提交表单时要执行的操作:
onsubmit="validate_form(this)"
所以你的整个表单标签现在是这样的:
<form method="post" action="mailto:s00103684@mail.itsligo.ie" name="basicform" id="basicform" onsubmit="return validate_form(this)">
请注意,我从该元素中删除了一个额外的"form"。
好,接下来我们要处理表单准备好验证时发生的事情。
function validate_form(form)
{
// ...we can step through each item by name and validate its value.
var username = checkUsernameForLength(form["username"].value);
var email = checkaddress(form["country"].value);
// ...and so on.
return (username && email && {my other return values});
}
你调用的每个方法(例如CheckUsernameForLength)应该返回true或false,这取决于输入是否有效。
最后一个返回值可能有点不优雅,但这是一个冗长的例子,它是一种汇总返回值并查看其中是否有"失败"值的方法。如果你所有的方法都返回true,那么最后一个返回值将被计算为true。否则(显然)它将返回false。
表单的提交将取决于validate_form()函数返回的值。
请从这个开始(http://jsfiddle.net/4aynr/4/)
function validate_form(form)
{
var complete=false;
clear_all();
complete = checkUsernameForLength(form.username); // pass the FIELD here
if(complete)
{
complete = checkaddress(form.country.value);
}
if(complete)
{
complete = checkEmail(form.email.value);
}
if (complete)
{
complete = checkphone(form.phone.value);
}
if (!complete) alert('something went wrong')
return complete;
}
和更改
<form form method="post" action="mailto:s00103684@mail.itsligo.ie"
name="basicform" id="basicform" >
<form method="post" action="mailto:s00103684@mail.itsligo.ie"
name="basicform" id="basicform"
onSubmit="return validate_form(this)">
和更改
<input value="send" type="button" onclick="validate_form(this.form)"/>
<input value="send" type="submit" />