Jquery自定义验证-最后一个表单字段未验证

Jquery自定义验证-最后一个表单字段未验证,jquery,validation,error-handling,Jquery,Validation,Error Handling,我在验证我的表单时遇到问题当我将所有字段/文本区域留空,从最后一个字段中排除时,我的表单对提交操作不做任何操作。。。当我只有一个textfield/textarea要验证时,也会发生这种情况。我不知道这是如何实现的,因为当我注销错误时,它会显示所有应该显示的错误,但不会添加到页面本身。 这是我的密码: 1) JQuery代码(在$(文档).ready(函数(ev){initialiseValidation()})中触发); 函数initialiseValidation() { $('form')

我在验证我的表单时遇到问题当我将所有字段/文本区域留空,从最后一个字段中排除时,我的表单对提交操作不做任何操作。。。当我只有一个textfield/textarea要验证时,也会发生这种情况。我不知道这是如何实现的,因为当我注销错误时,它会显示所有应该显示的错误,但不会添加到页面本身。 这是我的密码:

1) JQuery代码(在
$(文档).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)}
    {foreach$errorArr as$error}
  • {$error}
  • {/foreach}
{/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&amp;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>