2015-10-15 5 views
0

Я пытаюсь обернуть метку ошибки этим шаблоном, но безуспешно. (http://jqueryvalidation.org/)jQuery-validation errorlabel template

<div class="alert alert-error"> 
    <div class="fx-alert-icon"> 
     <i class="fxicons fxicons-error"></i> 
    </div> 
    <div class="fx-alert-desc"> 
     <label id="input-error" class="has-error" for="input1"> 
      Input with error!! 
     </label> 
    </div> 
</div> 

Одним из решений является изменение errorElement, а затем в методе showErrors() изменить message, но я не чувствую себя комфортно с этим решением ...

var errMsgTmpl = '<div class="alert alert-error">' + 
       '<div class="fx-alert-icon">' + 
       ' <i class="fxicons fxicons-error"></i>' + 
       '</div>' + 
       '<div class="fx-alert-desc"><label for="{{LABEL-FOR}}">{{ERROR-MSG}}</label></div>' + 
       '</div>'; 

$.validator.setDefaults({    
    errorElement: "section", 
    showErrors: function (errorMap, errorList) { 
     var i, elements; 
     for (i = 0; errorList[i]; i++) { 
      errorList[i].message = errMsgTmpl 
      .replace(/{{ERROR-MSG}}/, errorList[i].message) 
      .replace(/{{LABEL-FOR}}/, $(errorList[i].element).attr('id')); 
     } 
     this.defaultShowErrors(); 
    } 
}); 

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

+0

Функция обратного вызова showErrors используется для создания окна сводки сообщений, а не для индивидуальной настройки отдельных сообщений. – Sparky

+0

Спасибо @Sparky, какая-то идея, как я могу настроить индивидуальное сообщение? –

ответ

0

Я пытаюсь обернуть метку ошибки этим шаблоном, но безуспешно.

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

Вы не указали, где вы хотите, чтобы эта новая структура появилась в отношении input, поэтому я не могу разработать правильные методы обхода DOM. Элемент по умолчанию label размещен послеinput.

Несмотря на это, вы бы применять различные методы обхода DOM JQuery как .parents(), .closest(), .siblings(), .next() и т.д. к element объекта впрыснуть <label> элемент (error объект) точно в пределах нужной структуры.

$.validator.setDefaults({ 
    errorPlacement: function(error, element) { 
     error.insertAfter(element); 
    } 
}); 
+0

Если я понимаю ваше предложение с помощью 'errorPlacement', я помещаю сообщение об ошибке внутри моего шаблона, а затем я должен использовать методы' highlight' и 'unhighlight', чтобы показать или скрыть шаблон, содержащий сообщение об ошибке? –

+0

@NunoSantos, да, также можно использовать методы «highlight» и «unhighlight». Они будут автоматически запущены, когда сообщения должны быть переключены. Однако, только поместите * структуру * в свой HTML ... затем разрешите плагину автоматически вставлять сообщение об ошибке 'label' в соответствии с вашим кодом в обратном вызове' errorPlacement'. – Sparky

+0

большое спасибо. –

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