Валидирането на jQuery в раздели работи само при първо изпращане

Опитвам се да реша проблема, при който имам задължителни полета на формуляр, скрити зад раздели.

Успях да накарам тази половина да работи, така че когато щракнете върху бутона за изпращане, всички задължителни+скрити полета, той автоматично ще покаже този раздел.

Но проблемът е, когато: 1. Заредите страницата, щракнете върху изпращане и това работи добре. 2. Върнете се в първия раздел и щракнете отново върху изпращането и нищо не се случва.

http://jsfiddle.net/3xEch/

// Form validator
var theForms = $("form[method=post]:not(.noValidate)");
if (theForms.length){
    theForms.each(function(){
        var $dis = $(this);

        if($dis.hasClass("validateHidden")){
            jQuery.validator.setDefaults({
                ignore: ''
            });
        }

        validater = $dis.validate({
            errorPlacement: function(error, element) {
                var trigger = element.next('.ui-datepicker-trigger, .input-label');
                if(!trigger.length){ trigger = element.parent('label'); }
                var labelWidth = element.parent("p").not(".full").find("label").eq(0).width();
                error.insertAfter(trigger.length > 0 ? trigger : element)
                     .css("marginLeft", labelWidth);

                // Check if hidden inside tab
                if(element.parents(".tab").is(":hidden")){
                    var tabs = element.parents(".tabs");
                    tabs.find(".tab").hide();
                    var tab = $("#"+element.parents(".tab").attr("id"));
                    tab.show();
                    tabs.find(".tabmenu li").removeClass("selected");
                    tabs.find(".tabmenu li").eq(tab.index()-1).addClass("selected");
                }
            }
        });

        $('.tabs').bind('tabsselect', function(){
            validater.resetForm();
        });
    });
}

person John Magnolia    schedule 02.11.2012    source източник


Отговори (2)


Проблемът се дължи на факта, че errorPlacement се извиква само веднъж за всеки елемент, който е валидиран.

Вижте този въпрос: jQuery Validation Plugin: Извикване на функция errorPlacement, когато onfocusout, keyup и щракнете

Те препоръчват използването на метода showErrors за всички повтарящи се валидации.

person mccannf    schedule 02.11.2012

Вместо да изпълнявате този код на $(document).ready() - да изпълнявате този код винаги, когато се показва първият раздел? Предполагам, че кодът не работи след първия път, защото събитията са обвързани с HTML елементи, които се изчистват, когато се щракне върху друг раздел.

person Jimmery    schedule 02.11.2012