Проверка JQuery на дублированных полях не будет выделяться на клонах - PullRequest
1 голос
/ 21 ноября 2011

Я клонирую некоторые поля выбора в моей форме, используя

var o = settings;
var obj = $(this);
var objMatrix = $("div#dup_idiom").clone(true);
var placeHolder = obj.find(o.placeHolder);
var processClone = jQuery.format(objMatrix.html());
placeHolder.append($(processClone(i++)).addClass('closeable'));

Отправлено

obj.find(o.addRow).on('click', function(e) { ... });

Клонирование работает нормально.Это функция, которая вызывается для документа. Уже при загрузке страницы у меня уже есть хотя бы одна клонированная группа по умолчанию на странице.

Проверка jquery отлично работает для первого дублирования, включая пользовательскую функцию подсветки IЯ использую:

$(".selector").validate({
    highlight: function(element, errorClass) {
       if($(element).hasClass('langDep')) {
            $('#idiomArea').addClass(errorClass);
        } else {
            $(element).closest('.clearfix').addClass(errorClass);
        }
    },
    unhighlight: function(element, errorClass) {
        $(element).closest('.clearfix').removeClass(errorClass);
   }
});

Когда я дублирую группу, проверка поместит сообщение в дубликат, если оно неверно, но не выделит его, что не так с моей функцией подсветки?

Насколько я вижу при отладке, он применяет подсветку, но по какой-то причине он вызывает подсветку сразу после выделения на клонах, и я не понимаю, почему.Спасибо.

1 Ответ

0 голосов
/ 23 ноября 2011

Понял, что не так.

Я использовал эту пользовательскую проверку для проверки двух полей выбора, только если был выбран первый:

$.validator.addMethod("langDeep", function(value, element) {    
    if(!$(element).parent().prev().children("select").val()) return true;
    return value;
}, "Please select both the item and its amount."); 

Проблема заключалась в том, что я пыталсявыделите область вместо отдельных элементов для этой части формы.Это работало на первый обман, а не на всех остальных.Оказывается, валидация вернула бы значение true, если хотя бы одна из групп верна, поэтому она работала для первой, а не для дураков, первая всегда была правильной!Хитрость заключалась в том, чтобы настроить пользовательскую проверку вместо групповой проверки.Вот так:

$.validator.addMethod("langDeep", function(value, element) {
    var v = true;
    $('.dup_idiom_area').find('select.langDeep').each(function(){
         if(!$(this).val() && $(this).parent().prev().children("select").val()) {
            v = false;
         }
    });
    return v;
 }, "Please select both the item and its amount."); 

Теперь подсветка работает для всей формы, как и ожидалось.Это было так глупо.Я чувствую себя ужасно.Извините, если я заставил чей-то мозг истечь кровью слезы единорога.

...