Проверка 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: вызывать функцию errorPlacement при включении фокуса, клавишу и нажмите

Они рекомендуют использовать метод showErrors для любых повторных проверок.

person mccannf    schedule 02.11.2012

Вместо того, чтобы запускать этот код на $(document).ready() - запускать этот код всякий раз, когда отображается первая вкладка? Я предполагаю, что код не работает после первого раза, потому что события привязаны к элементам HTML, которые очищаются при нажатии на другую вкладку.

person Jimmery    schedule 02.11.2012