JQuery Validation plugin errorPlacement для флажка

Я использую плагин jQuery Validation для проверки моей формы. Моя проблема - это место сообщения об ошибке для флажка. см. это изображение:

enter image description here

Это часть html, связанная с флажками + Проверка JQuery:

<fieldset id = "q8"> <legend class="Q8"></legend>
<label> What are your favourite genres of movies?<span>*</span></label>
<div class="fieldset content"> 

<style type="text/css">
 .checkbox-grid li {
 display: block;
 float: left;
 width: 25%;
}     
</style>

<ul class="checkbox-grid">
<li><input type="checkbox" name="q8[]" value="Action"><label for="checkgenre[]">Action</label></li>
<li><input type="checkbox" name="q8[]" value="Adventure"><label for="checkgenre[]">Adventure</label></li>
<li><input type="checkbox" name="q8[]" value="Comedy"><label for="checkgenre[]">Comedy</label></li>
<li><input type="checkbox" name="q8[]" value="Animation"><label for="checkgenre[]">Animation</label></li>
<li><input type="checkbox" name="q8[]" value="Drama"><label for="checkgenre[]">Drama</label></li> 
<li><input type="checkbox" name="q8[]" value="Romance"><label for="checkgenre[]">Romance</label></li>
  //Continued the same for OTHER CHECKBOXES 

</div>
</fieldset>

  //html for other questions...

 <input class="mainForm" type="submit" name="continue" value="Save and Continue" />  

</form>

<script src="http://jqueryvalidation.org/files/dist/jquery.validate.min.js"></script>
<script src="http://jqueryvalidation.org/files/dist/additional-methods.min.js"></script>

<script>
$(document).ready(function() {

 $('#form2').validate({ // initialize the plugin
    errorLabelContainer: "#messageBox",
    wrapper: "li",

    rules: {
       "q8[]": {
            required: true,
        },
       "q9[]": {
            required: true,
        },
        q10: {
            required: true,
        },
        q11: {
            required: true,
        },
        q12: {
            required: true,
        }

    },

      errorPlacement: function(error, element) {

      if (element.attr("type") == "radio") {
         error.insertBefore(element);
       } else {
         error.insertBefore(element);

    }
   }

 }); 
});
</script>

Может кто-то любезно мне помочь, если можно исправить эту проблему или показать ошибку сообщение (для всех типов ввода) прямо рядом с вопросом? (Я имею в виду точно такую ​​же строку, что и вопрос, после *)??

Спасибо

Ответ 1

Я добавил class в label для вашего вопроса, чтобы найти это проще...

<label class="question">What are your favourite genres of movies?<span>*</span></label>

Затем вам просто нужно практиковать методы "обхода DOM". Изучите методы здесь.

  • $(element).parents('div') находит контейнер div вашего element.

  • Затем .prev($('.question')) приведет вас к .question, который является первым предыдущим родным братом этого div.

Поместите все это вместе и вставьте сообщение об ошибке сразу после вопроса.

error.insertAfter($(element).parents('div').prev($('.question')))

Внутри errorPlacement:

errorPlacement: function (error, element) {
    if (element.attr("type") == "checkbox") {
        error.insertAfter($(element).parents('div').prev($('.question')));
    } else {
        // something else if it not a checkbox
    }
}

DEMO: http://jsfiddle.net/sgsvtd6y/

Возможно, вам не нужен условный, поскольку этот метод должен работать на всех ваших типах input.

errorPlacement: function (error, element) {
    error.insertAfter($(element).parents('div').prev($('.question'))); 
}

В противном случае, если ваш HTML-код отличается, вы можете использовать условный код со слегка измененным обходом DOM.