2015-03-27 4 views
0

У меня есть form, для которого требуется подтверждение оповещения о «Соглашении» checkbox, а также различные поля, в которых есть сообщения об ошибках в spans. Когда я добавляю функцию успеха (чтобы сообщения об ошибках исчезли после того, как была сделана действительная запись), флажок доставляет пустое alert, когда он установлен, и вся форма дает пустое предупреждение, когда оно действительно отправлено. Представление идет, как только предупреждение было в порядке, но мне нужно избавиться от этих ложных предупреждений. Любые идеи, в которых я ошибся?jQuery Validate показывает пустое предупреждение об успехе

соответствующий раздел javascript здесь

$('#REDcheckout').validate({ 
errorElement: 'span', 
rules: { 
    'email': { 
     required: false, 
     email: true 
    }, 
     'first_name': { 
     required: true 
    }, 
     'last_name': { 
     required: true 
    }, 
     'member_address1': { 
     required: true 
    }, 
     'member_city': { 
     required: true 
    }, 
     'member_country': { 
     required: true 
    }, 
     'member_post_code': { 
     required: true 
    }, 
     'field_terms': { 
     required: true 
    } 
}, 

messages: { 
    email: 'You must enter a valid email address', 
    first_name: 'You must enter your First Name', 
    last_name: 'You must enter your Last Name (Surname)', 
    member_address1: 'Enter your address (this is the delivery address)', 
    member_city: 'Please enter your city', 
    member_post_code: 'You must enter your Postcode or Zipcode or NA if there is none', 
    field_terms: 'You must agree to the RED shop terms and conditions' 
}, 
success: function (label, element) { 
    label.parent().removeClass('error'); 
    label.remove(); 
}, 
errorPlacement: function (error, element) { 
    if (element.is(':checkbox')) { 
     alert(error.text()); 
    } else { // This is the default behavior 
     error.insertAfter(element); 
    } 
} 

});

и существует jsfiddle here

Любые идеи, где я не так и как это исправить?

Заранее спасибо

ответ

0

Я думаю, что правильный способ сделать это состоит в использовании showErrors() метод

$('#REDcheckout').validate({ 
    errorElement: 'span', 
    rules: { 
     'email': { 
      required: true, 
      email: true 
     }, 
      'first_name': { 
      required: true 
     }, 
      'last_name': { 
      required: true 
     }, 
      'member_address1': { 
      required: true 
     }, 
      'member_city': { 
      required: true 
     }, 
      'member_country': { 
      required: true 
     }, 
      'member_post_code': { 
      required: true 
     }, 
      'field_terms': { 
      required: true 
     } 
    }, 

    messages: { 
     email: 'You must enter a valid email address', 
     first_name: 'You must enter your First Name', 
     last_name: 'You must enter your Last Name (Surname)', 
     member_address1: 'Enter your address (this is the delivery address)', 
     member_city: 'Please enter your city', 
     member_post_code: 'You must enter your Postcode or Zipcode or NA if there is none', 
     field_terms: 'You must agree to the RED shop terms and conditions' 
    }, 
    success: function (label, element) { 
     label.parent().removeClass('error'); 
     label.remove(); 
    }, 
    showErrors: function (errorMap, errorList) { 
     if (errorMap.field_terms) { 
      alert(errorMap.field_terms) 
      delete errorMap.field_terms; 
     } 
     this.defaultShowErrors(); 
    } 
}); 

Демо: Fiddle


Проблема заключается в том, так как вы не добавляя элемент ошибки в целевой элемент, при каждом подтверждении вызова метод errorPlacement вызывается для флажка (действительный или нет), поэтому, когда вход проверяется, err orPlacement вызывается с пустым сообщением об ошибке

errorPlacement: function (error, element) { 
    if (element.is(':checkbox')) { 
     if (error.text().trim()) { 
      alert(error.text()); 
     } 
    } else { // This is the default behavior 
     error.insertAfter(element); 
    } 
} 

Демо: Fiddle

+0

Указание errorPlacement именно ответ, который я искал. Вы вдохновлены! Теперь работает так, как планировалось. Большое спасибо Аруну. – e4effect

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