Ввод с водяным знаком (CSS и JQuery) - PullRequest
13 голосов
/ 15 сентября 2011

JS

$(document).ready(function () {
    $(":input[data-watermark]").each(function () {
        $(this).val($(this).attr("data-watermark"));
        $(this).bind('focus', function () {
            if ($(this).val() == $(this).attr("data-watermark")) $(this).val('');
        });
        $(this).bind('blur', function () {
            if ($(this).val() == '') $(this).val($(this).attr("data-watermark"));
            $(this).css('color','#a8a8a8');
        });
    });
});

HTML

<label>Name: </label>
<input class="input" type="text" name="name" maxlength="" data-watermark="My Name" />

CSS

.input{
    width:190px;
    height:16px;
    padding-top:2px;
    padding-left:6px;
    color:#000;
    font-size: 0.688em;
    border:#8c9cad 1px solid;
}

Что я хотел бы исправить, так это то, что всякий раз, когда водяные знаки соответствуют значению ввода, цвет текста должен быть серый (#a8a8a8). И когда значение является чем-то, что пользователь пишет, тогда цвет должен быть черный .

Это скрипка: http://jsfiddle.net/qGvAf/

Ответы [ 3 ]

23 голосов
/ 15 сентября 2011

Ваше желаемое поведение «Ввод с водяным знаком» уже сделано - оно называется атрибутом placeholder . работает в современных браузерах .

В старых браузерах вы должны использовать плагин jQuery для эмуляции placeholder.

Наконец, чтобы установить цвет, вам нужен CSS, подобный следующему:

.placeholder {
    color: #a8a8a8;
}
::-webkit-input-placeholder {
    color: #a8a8a8;
}
:-moz-placeholder {
    color: #a8a8a8;
}

К сожалению, вы не можете объединить вышеуказанные правила; это не сработает .

8 голосов
/ 15 июня 2013
$(document).ready(function () {
    $(":input[data-watermark]").each(function () {
        $(this).val($(this).attr("data-watermark"));
        $(this).css("color","#a8a8a8");
        $(this).bind("focus", function () {
            if ($(this).val() == $(this).attr("data-watermark")) $(this).val('');
            $(this).css("color","#000000");
        });
        $(this).bind("blur", function () {
            if ($(this).val() == '') 
            {
                $(this).val($(this).attr("data-watermark"));
                $(this).css("color","#a8a8a8");
            }
            else
            {
                $(this).css("color","#000000");
            }
        });
    });
});
1 голос
/ 16 февраля 2014

Не переопределяйте существующее значение

У меня была небольшая проблема с этим хорошим решением, но с небольшим измененным решением, хотелось бы поделиться им.

Просто добавьте if оператор в строке 3 для предотвращения переопределения загруженных значений.

$(document).ready(function () {
    $('.watermark').each(function () {
    // add the line below
        if (this.value == '') {
            $(this).val($(this).attr("data-watermark"));
            $(this).css("color", "#a8a8a8");
            $(this).bind("focus", function () {
                if ($(this).val() == $(this).attr("data-watermark"))         
                $(this).val('');
                $(this).css("color", "#000000");
            });
            $(this).bind("blur", function () {
                if ($(this).val() == '') {
                    $(this).val($(this).attr("data-watermark"));
                    $(this).css("color", "#a8a8a8");
                }
                else {
                    $(this).css("color", "#000000");
                }
            });
    // Don't forget the closing bracket
        }
    })
});

Надеюсь, это полезно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...