Подтвердить что ты не робот

Самостоятельное размещение ошибок плагина JQuery Validation

Использование плагина jQuery Validation для следующей формы:

<form id="information" method="post" action="#">

            <fieldset>
                <legend>Please enter your contact details</legend>
                <span id="invalid-name"></span>
                <div id="id">
                    <label for="name">Name: (*)</label>
                    <input type="text" id="name" class="details" name="name" maxlength="50" />
                </div>

                <span id="invalid-email"></span>
                <div id="id">
                    <label for="email">Email: (*)</label>
                    <input type="text" id="email" class="details" name="email" maxlength="50" />
                </div>
            </fieldset>
            <fieldset>
                <legend>Write your question here (*)</legend>
                <span id="invalid-text"></span>
                <textarea  id="text" name="text" rows="8" cols="8"></textarea>


            <div id="submission">
                <input type="submit" id="submit" value="Send" name="send"/>
            </div>
            <p class="required">(*) Required</p>
            </fieldset>

             </form>

Как помещать ошибки в теги span? (# invalid-name, # invalid-email, # invalid-text)

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

Спасибо

4b9b3361

Ответ 1

Это базовая структура, вы можете использовать любой селектор, который вы хотели бы использовать в методе. У вас есть элемент error и элемент, который был недействителен.

jQuery.validator.setDefaults({
    errorPlacement: function(error, element) {
        error.appendTo(element.prev());
    }
});

Чтобы настроить таргетинг на идентификатор, вы можете сделать

jQuery.validator.setDefaults({
    errorPlacement: function(error, element) {
        error.appendTo('#invalid-' + element.attr('id'));
    }
});

Не тестировалось, но должно работать.

Ответ 2

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

Рассмотрим:

<div id="id">
    <label for="name">Name: (*)</label>
    <input type="text" id="name" class="details" name="name" maxlength="50" />
</div>

Теперь добавьте следующую строку:

<label for="name" class="error" generated="true"></label>

который является стандартной меткой ошибки:

<div id="id">
    <label for="name">Name: (*)</label>
    <input type="text" id="name" class="details" name="name" maxlength="50" />
</div>
<div id="id-error">
    <label for="name" class="error" generated="true"></label>
<div>

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

Ответ 3

Я обнаружил, что использование .insertAfter, а не .appendTo работает:

jQuery.validator.setDefaults({
    errorPlacement: function(error, element) {
        error.insertAfter('#invalid-' + element.attr('id'));
    }
});

Ответ 4

Я использую расширение метаданных с помощью валидатора.. (заметьте, я устанавливаю его для использования атрибута meta-данных в разметке...)

<input ... data=meta='{
    errorLabel: "#someotherid"
    ,validate: {
        name:true
    }
}' >

затем в коде...

jQuery.validator.setDefaults({
    errorPlacement: function(error, element) {
        error.appendTo($(
            $(element).metadata().errorLabel
        ));
    }
});

Я использую метаданные для многих аналогичных функций, которые работают довольно хорошо... Заметьте, я использовал одиночные тики (апострофы) вокруг метаданных, таким образом вы можете использовать серверный сериализатор JSON на стороне сервера для ввода в эту часть тега (который должен использовать двойные кавычки вокруг строк)... может быть проблема с буквальным апосом (замените "'" на "\ x27" в строке).