2015-09-18 3 views
0

Я бы хотел использовать обмен сообщениями об ошибках, но не нужно записывать сообщения для каждой формы, на этом сайте более 20. Формы все имеют такую ​​структуру:Упрощение упрощения jQuery

<li> 
     <label for="firstName">First Name*</label> 
     <input name="firstName" id="firstName" type="text"> 
    </li> 

    <li> 
     <label for="lastName">Last Name*</label> 
     <input name="lastName" id="lastName" type="text"> 
    </li> 

У меня есть следующие правила проверки:

$.validator.messages.required = function (param, input) { 
    msg = $("input").prev("label").eq(0).text(); 
    return 'Please fill out the ' + msg + ' required field.'; 
} 

Это вставляет текст из наклейки первого поля ошибки для каждой ошибки. До этого он создал строку с меткой каждого поля ошибки для каждой ошибки «Пожалуйста, заполните поле« Имя »,« Фамилия »(и т. Д.)».

Как получить предыдущую метку для каждого класса ошибки и использовать этот текст? Я не могу получить .each(), чтобы работать здесь. Спасибо.

Вот это fiddle.

+0

У вас есть jsfiddle? – DinoMyte

+0

да, я добавил ссылку на исходный вопрос –

+0

Вы должны ** НЕ ** иметь свой '.validate()' метод, содержащийся в обработчике 'click'! Он входит в обработчик события готовности DOM, потому что он используется только для инициализации. – Sparky

ответ

1

Изменить селектор из $("input") в $(input) первый из них является селектор для всех элементов <input> ... последний селектор, используя input аргумент функции что г e представляет токен , текущий валидный элемент.

msg = $(input).prev("label").text(); 

DEMO: http://jsfiddle.net/n2cL6u7j/1/

ПРИМЕЧАНИЕ: Удалите click обработчик и заменить его на обработчик событий DOM готов. Метод .validate() используется только для инициализации плагина, поэтому его нужно только один раз вызвать на DOM. В противном случае он получает имя после, когда форма загружается на страницу. В jsFiddle вы вызываете .validate() каждый раз, когда нажата кнопка отправки формы, и это не имеет смысла.



Оригинал Ответ:(есть некоторые проблемы)

Просто используйте опцию errorPlacement манипулировать сообщение для required следующего правила ...

errorPlacement: function (error, element) { 
    if (error.text() === "required") { // <- only when the 'required' rule is used 
     lbl = $(element).prev('label').text(); 
     error.text('Please fill out the ' + lbl + ' required field.'); 
    } 
    error.insertAfter(element); // <- default placement 
}, 

Поскольку мое условие смотрит на «обязательное» сообщение дляПравило, я изменил это сообщение по всему миру. Это было сделано только для упрощения моего условного, и вы могли бы полностью пропустить это.

$.validator.messages.required = function (param, input) { 
    return 'required'; 
} 

DEMO: http://jsfiddle.net/jhdo83f8/

+0

Он просто возвращается «требуется», твоя скрипка работает, хотя это то, что я напортачиваюсь. Однако я не могу вставлять сообщения с встроенными входами, мне нужно поместить их в отдельный div, как я уже говорил выше. –

+0

@DirtyBirdDesign, см. Мой отредактированный ответ. – Sparky

+0

Я ценю исправление, которое было довольно простым, usint $ (input) vs $ ("input"). Кроме того, это хороший совет для обработчика кликов EXCEPT, как я прокомментировал ниже при первом приведении этого вопроса, форма вводится через AJAX, поэтому вам нужно привязать его к щелчку кнопки, он не существует в DOM. Спасибо хоть. –

-1

Попробуйте это :.

$("input").each(function(i,op) 
{ 
    alert($(this).prev("label").text());  
}); 
+0

Ничего общего с плагином jQuery Validate. – Sparky

+0

Thats just snipet, как вы можете получить текст метки, итерации через каждый элемент управления вводом. – DinoMyte

+1

Ему не нужно перебирать что-либо. Ему просто нужна «метка» для проверки поля. – Sparky

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