2014-10-27 2 views
0

У меня есть функция, которая сравнивает два поля.показать сообщение об ошибке после проверки - jQuery Validate

$.validator.addMethod("validatormethod", function (value, element) { 
    return $('#Field1').val() > $('#Field2').val() 
}, "Test"); 

форма является динамическим и, следовательно, форма проверяется с помощью each:

$('.validateclass').each(function() { 
     $(this).rules('add', { 
      validatormethod: true, 
      messages: {validatormethod: "Test" } 
     }) 
    }); 

$('.validateclass2').each(function() { 
     $(this).rules('add', { 
      required: true, 
      messages: {required: "This field is required" } 
     }) 
    }); 

$('#myForm').valid(); 

Теперь моя проблема сообщение Test появляется, как только при загрузке страницы. Он должен появиться только после сравнения поля. Я знаю, что это связано с линией $('#formSaveComponent').valid();. Но я хочу, чтобы сообщение появилось при загрузке страницы. Есть ли способ, которым я могу это сделать, используя плагин jQuery Validate. Цитата

SAMPLE FIDDLE

+0

Показать HTML для формы. Также объясните, почему вы запускаете '.valid()', когда страница загружается и что означает ваш заголовок. Показ сообщения об ошибке после проверки является поведением по умолчанию. – Sparky

+0

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

+0

Настройка .Valid() на загрузке формы будет выполняться для каждого поля формы в момент ее загрузки, поэтому «Тест» появляется. Если вы хотите, чтобы некоторые вещи проверялись, вы должны указать поля, которые хотите проверить, а не всю форму. – tlbignerd

ответ

1

OP:

«Теперь моя проблема заключается в тестовое сообщение появляется, как только страница загрузится Он должен появиться только после того, как поле сравнивается.».

Вы написали свой собственный метод, как если бы эти поля required ... поэтому вы сразу же получаете сообщение об ошибке, и в то время как поля все еще пусты.

Пока эти поля не required, вам нужно будет добавить this.optional(element) || к пользовательскому следующему способу ...

$.validator.addMethod("validatormethod", function (value, element) { 
    return this.optional(element) || $('#Field1').val() > $('#Field2').val() 
}, "Test"); 

Теперь пользовательский метод не сработает, если что-то не вводится в соответствующие поля ,


EDIT 1

Хотя я понятия не имею, почему в вашем jsFiddle, вы сравниваете txtLastName к txtFirstName с оператором в > сравнения ... точно как бы одно имя быть «больше» другой?


EDIT 2

Your jsFiddle нарушается, потому что ...

  1. Вы ориентируетесь поля на id, однако ваши поля только не содержат name и не id. Изменить $('#fieldname') на $('[name="fieldname"]'), чтобы нанести на них name.

  2. Вы сравниваете две строки с оператором сравнения, который всегда будет терпеть неудачу, потому что строки не являются числами. Вам нужно parseInt(), чтобы преобразовать строку в целое число, чтобы сравнить их ...

    parseInt($('[name="fieldname"]').val()) 
    

DEMO: http://jsfiddle.net/h4bf10vt/3/

+0

это работает, но сообщение «Тест» появляется, даже если оно является правильным (действительным) полем – user2281858

+0

@ user2281858, что не имеет смысла, поскольку сообщения об ошибках никогда не отображаются, когда поля действительны; и почему я дважды просил вас показать соответствующий HTML-код в вашем вопросе. Я посмотрю на ваш jsFiddle, но в соответствии с правилами этого сайта jsFiddle не являются заменой для отображения кода внутри самого вопроса. – Sparky

+0

@ user2281858, мой код в jsFiddle: http://jsfiddle.net/h4bf10vt/2/ ~ Объясните, как именно и где это происходит. – Sparky

Смежные вопросы