Jquery自定义验证-最后一个表单字段未验证
我在验证我的表单时遇到问题当我将所有字段/文本区域留空,从最后一个字段中排除时,我的表单对提交操作不做任何操作。。。当我只有一个textfield/textarea要验证时,也会发生这种情况。我不知道这是如何实现的,因为当我注销错误时,它会显示所有应该显示的错误,但不会添加到页面本身。 这是我的密码: 1) JQuery代码(在Jquery自定义验证-最后一个表单字段未验证,jquery,validation,error-handling,Jquery,Validation,Error Handling,我在验证我的表单时遇到问题当我将所有字段/文本区域留空,从最后一个字段中排除时,我的表单对提交操作不做任何操作。。。当我只有一个textfield/textarea要验证时,也会发生这种情况。我不知道这是如何实现的,因为当我注销错误时,它会显示所有应该显示的错误,但不会添加到页面本身。 这是我的密码: 1) JQuery代码(在$(文档).ready(函数(ev){initialiseValidation()})中触发); 函数initialiseValidation() { $('form')
$(文档).ready(函数(ev){initialiseValidation()})中触发);
函数initialiseValidation()
{
$('form')。每个(函数()
{
var验证器=[];
变量形式=$(此);
var textfields=form.find(“输入[type]”)。not(“输入[type=submit]”);
var textareas=form.find(“textarea”);
var formfields=$.merge(textfields,textareas);
formfields.each(函数()
{
var inputfield=$(此值);
var field=inputfield.find('[name='+inputfield.attr('name')+']);
var type=inputfield.attr('type')==未定义?'textarea':inputfield.attr('type');
var label=inputfield.attr(“名称”);
函数隐藏反馈(消息)
{
$('.errormessages').remove();
}
功能显示反馈(信息){
//插入自己的错误消息
$(“.formulier”).before($('
').addClass('errormessages contact').append($('')).text(message));
}
if(inputfield.length)
{
if(inputfield.is(“输入”)| | inputfield.is(“文本区域”))
{
函数验证器()
{
var错误=未定义;
如果(!inputfield.val())
错误=getMessageForLabel(标签);
else if(label='email'&&!inputfield.val().match(/.+@.+\..+/)
error=“Gelieve een geldig电子邮件地址在te geven中。”;
else if(label==“username”&&checkUsername())
error=“Username bestaat niet。”;
隐藏反馈();
如果(错误)
{
显示反馈(错误);
抛出新的ValidationError(标签、错误、函数(){
field.focus();
返回false;
});
}
}
//field.onchange的验证程序
功能快速验证(事件)
{
//忽略选项卡键
//日志(event.keyCode);
如果(event.keyCode!=9)
{
试一试{
验证器();
}
捕获(验证错误){
}
}
}
inputfield.change(快速验证)、keyup(快速验证)、blur(快速验证);
//form.submit的验证程序
推送(验证器);
}
}
});
$(此).提交(功能(ev)
{
var错误=[];
//调用所有验证器
for(验证程序中的var v)
{
试一试{
验证器[v]();
}
捕获(验证错误)
{
错误。推送(验证错误);
}
}
if(errors.length)
{
$('.errormessages').empty();
对于(错误中的var i)
{
var msg=errors[i]['error_msg'];
$(“.errormessages”).append($('').text(msg));
}
返回false;
}
});
});
}
函数验证错误(标签、错误消息、确定回调)
{
this.label=标签;
this.error\u msg=error\u msg;
this.ok\u callback=ok\u callback;
}
2) HTML代码(不是最好的,所有的类都用于使样式更好…)
{if!空($errorArr)}
{/if}
沃纳姆:
纳姆:
电邮:
贝里赫特:
{if-isset($smarty.post.bericht)}{$smarty.post.bericht}{/if}
我在网上搜索了很多,但是我找不到这个问题的解决方案,所以如果你有任何提示/解决方案,我将不胜感激 调用
hide_feedback()时代码>。你的意思是完全删除元素吗?是的,在你提交之前,它只是单独验证每个输入字段,但是当你提交它时
function initialiseValidation()
{
$('form').each(function()
{
var validators = [];
var form = $(this);
var textfields = form.find("input[type]").not("input[type=submit]");
var textareas = form.find("textarea");
var formfields = $.merge(textfields, textareas);
formfields.each(function()
{
var inputfield = $(this);
var field = inputfield.find('[name=' + inputfield.attr('name') + ']');
var type = inputfield.attr('type') == undefined ? 'textarea' : inputfield.attr('type');
var label = inputfield.attr("name");
function hide_feedback(message)
{
$('.errormessages').remove();
}
function show_feedback(message){
// Insert own error message
$(".formulier").before($('<ul/>').addClass('errormessages contact').append($('<li/>').text(message)));
}
if(inputfield.length)
{
if (inputfield.is("input") || inputfield.is("textarea"))
{
function validator()
{
var error = undefined;
if (!inputfield.val())
error = getMessageForLabel(label);
else if (label == 'email' && ! inputfield.val().match(/.+@.+\..+/))
error = "Gelieve een geldig e-mail adres in te geven.";
else if(label == "username" && checkUsername())
error = "Username bestaat niet.";
hide_feedback();
if (error)
{
show_feedback(error);
throw new ValidationError(label, error, function () {
field.focus();
return false;
});
}
}
// Validator for field.onchange
function quick_validate(event)
{
// Ignore tab-key
//log(event.keyCode);
if (event.keyCode != 9)
{
try {
validator();
}
catch(validation_error) {
}
}
}
inputfield.change(quick_validate).keyup(quick_validate).blur(quick_validate);
// Validator for form.submit
validators.push(validator);
}
}
});
$(this).submit(function(ev)
{
var errors = [];
// Call all validators
for (var v in validators)
{
try {
validators[v]();
}
catch(validation_error)
{
errors.push(validation_error);
}
}
if (errors.length)
{
$('.errormessages').empty();
for(var i in errors)
{
var msg = errors[i]['error_msg'];
$(".errormessages").append($('<li/>').text(msg));
}
return false;
}
});
});
}
function ValidationError(label, error_msg, ok_callback)
{
this.label = label;
this.error_msg = error_msg;
this.ok_callback = ok_callback;
}
<form action="index.php?page=contact&action=confirm" method="post" enctype="multipart/form-data" id="contactform">
{if !empty($errorArr)}
<ul class="errormessages contact">
{foreach $errorArr as $error}
<li>{$error}</li>
{/foreach}
</ul>
{/if}
<div class="formulier">
<div class="formblock">
<div class="label">
<label for="naam">Voornaam:</label>
</div>
<input type="text" name="naam" id="naam" autocomplete="true" value="{if isset($smarty.post.naam)}{$smarty.post.naam}{/if}"/>
</div>
</br>
<div class="formblock">
<div class="label">
<label for="familienaam">Naam:</label>
</div>
<input type="text" name="familienaam" id="familienaam" autocomplete="true" value="{if isset($smarty.post.familienaam)}{$smarty.post.familienaam}{/if}"/>
</div>
</br>
<div class="formblock">
<div class="label">
<label for="email">E-mail:</label>
</div>
<input type="text" name="email" id="email" autocomplete="true" value="{if isset($smarty.post.email)}{$smarty.post.email}{/if}"/>
</div>
</br>
<div class="formblock">
<div class="label">
<label for="bericht">Bericht:</label>
</div>
<textarea rows="10" cols="50" name="bericht" id="bericht">{if isset($smarty.post.bericht)}{$smarty.post.bericht}{/if}</textarea>
</div>
</br>
<div class="formblock">
<input type="submit" value="stuur bericht" name="validateMail" id="validateMail"/>
</div>
</div>
</form>