в jQuery по умолчанию переопределить сообщение об ошибке проверки дисплея (CSS) всплывающее/подсказка как


Я пытаюсь переехать метку сообщения об ошибке по умолчанию с div вместо метки. Я посмотрел на этот пост а также и получить, как это сделать, но мои ограничения с CSS преследуют меня. Как я могу отобразить это, как некоторые из этих примеров:

Пример #1 (Dojo) - необходимо ввести недопустимый Ввод, чтобы увидеть отображение ошибки
Пример #2

вот пример кода, который переопределяет метку ошибки в div элемент

$(document).ready(function(){
            $("#myForm").validate({
                rules: {
                    "elem.1": {
                        required: true,
                        digits: true
                    },
                    "elem.2": {
                        required: true
                    }
                },
                errorElement: "div"
            });                  
        });

теперь я в недоумении по части css, но вот он:

div.error {
        position:absolute;
        margin-top:-21px;
     margin-left:150px;
     border:2px solid #C0C097;
        background-color:#fff;
        color:white;
        padding:3px;
        text-align:left;
        z-index:1;
        color:#333333;
     font:100% arial,helvetica,clean,sans-serif;
     font-size:15px;
     font-weight:bold;  
    }

обновление:

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

if (element.attr('type') == 'radio' || element.attr('type') == 'checkbox') {
   element = element.parent();

   offset = element.offset();
   error.insertBefore(element)
   error.addClass('message');  // add a class to the wrapper
   error.css('position', 'absolute');
   error.css('left', offset.left + element.outerWidth());
   error.css('top', offset.top - (element.height() / 2)); // Not working for Radio, displays towards the bottom of the element. also need to test with checkbox
} else {
   // Error placement for single elements
   offset = element.offset();
   error.insertBefore(element)
   error.addClass('message');  // add a class to the wrapper
   error.css('position', 'absolute');
   error.css('left', offset.left + element.outerWidth());
   error.css('top', offset.top - (element.height() / 2));
}

css-это то же самое, что и ниже (ваш код css)

Html

<span>
<input type="radio" class="checkbox" value="P" id="radio_P" name="radio_group_name"/>
<label for="radio_P">P</label>
<input type="radio" class="checkbox" value="S" id="radio_S" name="radio_group_name"/>
<label for="radio_S">S</label>
</span>
7 69

7 ответов:

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

$(document).ready(function(){
    $("#myForm").validate({
        rules: {
            "elem.1": {
                required: true,
                digits: true
            },
            "elem.2": {
                required: true
            }
        },
        errorElement: "div",
        wrapper: "div",  // a wrapper around the error message
        errorPlacement: function(error, element) {
            offset = element.offset();
            error.insertBefore(element)
            error.addClass('message');  // add a class to the wrapper
            error.css('position', 'absolute');
            error.css('left', offset.left + element.outerWidth());
            error.css('top', offset.top);
        }

    });
});

вы можете играть с левой и верхней атрибутов CSS, чтобы показать сообщение об ошибке на верхней, левой, правой или нижней части элемента. Например, чтобы показать ошибку сверху:

    errorPlacement: function(error, element) {
        element.before(error);
        offset = element.offset();
        error.css('left', offset.left);
        error.css('top', offset.top - element.outerHeight());
    }

и так далее. Вы можете обратиться к документация jQuery о css для дополнительные параметры.

вот css, который я использовал. Результат выглядит точно так, как вы хотите. С как можно меньшим количеством CSS:

div.message{
    background: transparent url(msg_arrow.gif) no-repeat scroll left center;
    padding-left: 7px;
}

div.error{
    background-color:#F3E6E6;
    border-color: #924949;
    border-style: solid solid solid none;
    border-width: 2px;
    padding: 5px;
}

и вот фоновое изображение вам нужно:

alt текст http://sandbox.scriptiny.com/messages/images/msg_arrow.gif

если вы хотите, чтобы сообщение об ошибке отображалось после группы параметров или полей. Затем сгруппируйте все эти элементы внутри одного контейнера " div " или "fieldset". Добавить например, специальный класс для всех них "группа". И добавьте следующее В начало функции errorPlacement:

errorPlacement: function(error, element) {
    if (element.hasClass('group')){
        element = element.parent();
    }
    ...// continue as previously explained

если вы хотите обрабатывать только конкретные случаи, вы можете использовать attr вместо этого:

if (element.attr('type') == 'radio'){
    element = element.parent();
}

этого должно быть достаточно для отображения сообщения об ошибке рядом с родительским элементом.

вам может потребоваться изменить ширину родительского элемента, чтобы быть менее 100%.


я попробовал ваш код и он работает для меня это прекрасно. Вот предварительный просмотр: alt text

Я только что сделал очень небольшую корректировку заполнения сообщения, чтобы он вписался в строку:

div.error {
    padding: 2px 5px;
}

вы можете изменить эти цифры, чтобы увеличить/уменьшить отступ сверху/снизу или слева/справа. Вы также можете добавить высоту и ширину в сообщении об ошибке. Если у вас все еще есть проблемы, попробуйте заменить span на div

<div class="group">
<input type="radio" class="checkbox" value="P" id="radio_P" name="radio_group_name"/>
<label for="radio_P">P</label>
<input type="radio" class="checkbox" value="S" id="radio_S" name="radio_group_name"/>
<label for="radio_S">S</label>
</div>

и затем дать контейнеру ширину (это очень важно)

div.group {
    width: 50px; /* or any other value */
}

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

Я использую jQuery BeautyTips для достижения эффекта маленького пузыря, о котором вы говорите. Я не использую плагин проверки, поэтому я не могу сильно помочь там, но очень легко стилизовать и показать BeautyTips. Вы должны разобраться в этом. Боюсь, это не так просто, как просто правила CSS, так как вам нужно использовать элемент canvas и включить дополнительный файл javascript для IE, чтобы играть с ним хорошо.

несколько вещей:

   Age: (*) 12 - 18 | () 19 - 30 | 31 - 50 

скорее всего, будет изменен на правильный ответ, поскольку человек не хочет, чтобы он переходил к умолчанию. Если они видят его пустым, они, скорее всего, подумают "не ваше дело" и пропустят оно.

во-вторых, я смог получить эффект, который я думаю, что вы хотите без каких-либо свойств позиционирования. Вы просто добавляете padding-right в форму (или div формы, что угодно), чтобы обеспечить достаточное пространство для вашей ошибки и убедиться, что ваша ошибка будет соответствовать этой области. Затем у вас есть предварительно настроенный класс css под названием "error" , и вы устанавливаете его как имеющий отрицательное поле-верх примерно по высоте вашего поля ввода и поле-слева от расстояния слева до того места, где ваше заполнение-справа должны начать. Я попробовал это, это не здорово, но он работает с тремя свойствами и не требует поплавков или абсолютов:

   <style type="text/css">
    .error {
        width: 13em; /* Ensures that the div won't exceed right padding of form */
        margin-top: -1.5em;  /*Moves the div up to the same level as input */
        margin-left: 11em;   /*Moves div to the right */
        font-size: .9em;     /*Makes sure that the error div is smaller than input */
    }

   <form>
   <label for="name">Name:</label><input id="name" type="textbox" />
   <div class="error"><<< This field is required!</div>
   <label for="numb">Phone:</label><input id="numb" type="textbox" />
   <div class="error"><<< This field is required!</div>
   </form>

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

$('#myForm').validate({
    errorElement: "div",
    wrapper: "div class=\"message\"",
    errorPlacement: function(error, element) {
        offset = element.offset();
        error.insertBefore(element);
        //error.addClass('message');  // add a class to the wrapper
        error.css('position', 'absolute');
        error.css('left', offset.left + element.outerWidth() + 5);
        error.css('top', offset.top - 3);
    }

});

Я предполагаю, что это позволяет оценщику знать, какие элементы div, чтобы удалить, а не все из них. Работал на меня, но я не такой совсем уверен, почему, так что если кто-то может пояснить, что может помочь другим тонну.

этот ответ действительно помог мне, в моем случае мне пришлось отфильтровать некоторые элементы и иметь специальную настройку на их ошибку div,

errorPlacement:function(error,element) {
    if (element.attr("id") == "special_element") {
        // special align
    } else { // default error scheme
        error.insertAfter(element);
    }
}

добавить следующий css к вашему .проверьте метод, чтобы изменить css или функциональность

 errorElement: "div",
    wrapper: "div",
    errorPlacement: function(error, element) {
        offset = element.offset();
        error.insertAfter(element)
        error.css('color','red');
    }

Если бы вы могли предоставить какую-то причину, почему вам нужно заменить метку на div, это, безусловно, поможет...

кроме того, не могли бы вы вставить образец, который был бы полезен ( http://dpaste.com/ или http://pastebin.com/)