Не требуется метка в качестве параметра для successMessage
.
function successMessage() {
return messages[Math.floor(Math.random() * messages.length)];
}
Я считаю, что если метка уже является объектом jQuery, то это делает: $(label)
создаст новый объект метки jQuery, присоединенный кJQuery.Попробуйте это:
if(!label.hasClass("valid")){
label.addClass("valid").text(successMessage());
}
Или
if(label.not(".valid")){
label.addClass("valid").text(successMessage());
}
Или даже лучше:
label.not(".valid").addClass("valid").text(successMessage());
[РЕДАКТИРОВАТЬ] после вопроса, заданного в комментарии
if(label.text() === ''){
label.not(".valid").addClass("valid").text(successMessage());
}
else {
label.addClass("valid");
}
Я предполагаю, что вам нужно добавить класс valid
к label
.Если вы не удалите оператор else
.
Я также предполагаю, что единственный способ ввода текста в label
- через successMessage
.Поэтому вам не нужно добавлять текст к label
.Он останется прежним.
Кстати, если плагин меняет классы ваших HTML-элементов, то это серьезный побочный эффект кода, и я лично не буду мириться сэто.
Теперь, возможно, более логичным является то, что вы перезагружаете свой контент после подачи.Если это так, то все манипуляции jQuery с DOM, которые вы делали до отправки, будут потеряны из-за перезагрузки нового контента.
В будущем было бы очень важно добавить ссылку на фактический плагин.в и более полный код для работы.@Nick Craver использует jsfiddle.net, а я использую jsbin.com для публикации примера кода.Это может быть совместное усилие всех наших частей, чтобы иметь возможность воспроизвести и решить проблему.
[РЕДАКТИРОВАТЬ 1A] Вот это
Проблема в том, что метка создается более одного раза.С этим плагином, на мой взгляд, не так легко работать.
Мне пришлось изменить расположение ошибок и логику успеха.
errorPlacement: function(label, element) {
// position error label after generated textarea
var name = element.attr('name');
if ($('#' + name + '_label').length === 0) {
label.attr('id', name + '_label');
label.insertAfter(element);
if (element.is("textarea")) {
label.css({'padding-left': '105px'})
}
}
},
success: function(label) {
var name = label.attr('for');
$('#' + name + '_label').not('.valid').removeClass('error').addClass('valid').text(successMessage());
}