проблема смещения при замене ошибки jquery validator

#javascript #jquery #offset

#javascript #jquery #смещение

Вопрос:

Я пытаюсь использовать errorPlacement с плагином Validator для jquery, но у меня возникли проблемы со смещением. Если элемент скрыт во время проверки (на другой вкладке), смещение возвращает значение 0,0 (верхний левый угол экрана).

 $(document).ready(function() {

var tabs = $("#tabs").tabs();

var validator = $("#myForm").validate({

        errorElement: "div",
        wrapper: "div",  // a wrapper around the error message
        errorPlacement: function(error, element) {

            if (element.parent().hasClass('group')){
                element = element.parent();
            }


            offset = element.position();
            error.insertBefore(element)
            error.addClass('message');  // add a class to the wrapper
            error.css('position', 'absolute');
            error.css('left', offset.left   element.outerWidth());
            error.css('top', offset.top);


        }
    });
}
  

Есть предложения о том, как это исправить? Я бы пересчитал смещения при изменении вкладки или что-то в этом роде, но это делается в validate, который, как я понял, вызывается только один раз.

Спасибо за помощь!

Редактировать:

Кажется, я все еще застрял на этом. Проблема, которую я нахожу, заключается в том, что (по крайней мере, из того, что я прочитал) я не могу вызвать validate более одного раза. Как вы думаете, каким-то образом добавление каждого сообщения об ошибке и пары ключей элемента в список сработает, или это грязный взлом? Я все равно не совсем уверен, как добавить их в список. Любые предложения были бы высоко оценены. Спасибо!!

Комментарии:

1. иногда jQuery validation plugin действительно отстой .. я видел много проблем, связанных с этим плагином

2. @diEcho: Тогда есть какие-либо альтернативы, кроме как делать это самому? Я только что потратил целую кучу времени на написание веб-приложения в нем, только чтобы выяснить, что есть один крошечный недостаток, который может привести к поломке enire: S

3. этот плагин действительно выдает ошибку в будущем. лучше вам написать свою собственную проверку (я знаю, что время также является фактором) или поискать какой-нибудь лучший плагин… ВСЕГО НАИЛУЧШЕГО

Ответ №1:

Это: «Проблема, которую я нахожу, заключается в том, что (по крайней мере, из того, что я прочитал) я не могу вызвать validate более одного раза». на самом деле это неправда. Вы можете вручную запустить проверку формы в любое время из своего кода javascript, и с помощью небольшой хитрости вы даже можете указать, какая часть вашей формы должна быть проверена.

Предполагая, что:

  • у вас есть форма с вкладками,
  • вкладки обернуты в divs
  • скрытые вкладки имеют класс css «неактивный», видимая вкладка имеет класс css «активный»
  • в вашей форме есть кнопки «Вперед» и «Назад» для навигации по вкладкам

Я бы сделал что-то вроде этого:

 $(document).ready(function() {

    var validator = $("#myForm").validate({
            ... // your settings
            ignore : ['#tabs .inactive input'] // tells the validator to only validate elements on your current tab
        });
    }


    $(".forward").click(function() {
        if (validator.form()) {  // triggers validation of the currently visible form inputs
                // step forward to the next tab
        }
    });
});
  

Кроме того, если вы ищете решение для вырезания из бумаги, взгляните на этот пример многоступенчатой проверки формы:http://jquery.bassistance.de/validate/demo/multipart /

Комментарии:

1. Да, я просмотрел этот пример, но он был немного запутанным. Как бы мне сделать, чтобы неактивные вкладки имели класс «неактивный», предполагая, что я использую вкладки jqueryui? И под неактивными вкладками вы подразумеваете отключенные вкладки или только ту, на которой я в данный момент не использую? Что произойдет тогда, если пользователь перейдет к последней вкладке и попытается отправить? Кажется, что добавление неактивных вкладок в ignore означало бы, что нажатие кнопки submit подтвердит только последнюю вкладку. (Я хотел сказать, что вы не можете вызвать validate для одних и тех же входных данных более одного раза) Спасибо!