Как автоматически скрыть заполнитель текста при фокусе, используя CSS или JQuery?

181

Это делается автоматически для каждого браузера, кроме Chrome.

Я предполагаю, что мне нужно настроить таргетинг на Chrome.

Любые решения?

Если не с CSS, то с jQuery?

  • 1
    как дела?
  • 0
    тогда моя редакция может помочь
Показать ещё 4 комментария
Теги:
google-chrome
placeholder

26 ответов

204
Лучший ответ
<input 
type="text" 
placeholder="enter your text" 
onfocus="this.placeholder = ''"
onblur="this.placeholder = 'enter your text'" />
  • 1
    Это заставляет его идти, но когда я щелкаю прочь от поля, оно остается пустым.
  • 2
    @LondonGuy: Только что отредактировал мой пост, посмотрите, работает ли он так, как вы хотели. Но решение Тони Мишеля Каубе приятнее
Показать ещё 7 комментариев
401

Firefox 15 и IE 10+ также поддерживают это сейчас. Чтобы расширить решение Casey Chu CSS :

input:focus::-webkit-input-placeholder { color:transparent; }
input:focus:-moz-placeholder { color:transparent; } /* FF 4-18 */
input:focus::-moz-placeholder { color:transparent; } /* FF 19+ */
input:focus:-ms-input-placeholder { color:transparent; } /* IE 10+ */
  • 20
    Лучший ответ, который я видел, прекрасно работает и без JS.
  • 1
    Отличный ответ! Я не вижу большого смысла отказываться от своего старого решения jQuery в пользу HTML5, а затем идти дальше и снова добавить JavaScript в качестве исправления. Это просто решение, которое я искал.
Показать ещё 11 комментариев
66

Вот только CSS-решение (на данный момент работает только в WebKit):

input:focus::-webkit-input-placeholder {
    opacity: 0;
}
  • 10
    За проголосовали за не использование Javascript.
  • 1
    Мне нравится этот ответ, но поддержка браузера для этого просто еще не существует.
Показать ещё 2 комментария
36

Вы пробовали заполнить attr?

<input id ="myID" type="text" placeholder="enter your text " />

-Edit -

Я вижу, попробуйте это:

$(function () {

    $('#myId').data('holder', $('#myId').attr('placeholder'));

    $('#myId').focusin(function () {
        $(this).attr('placeholder', '');
    });
    $('#myId').focusout(function () {
        $(this).attr('placeholder', $(this).data('holder'));
    });


});

Тест: http://jsfiddle.net/mPLFf/4/

-Edit -

Собственно, поскольку для описания значения следует использовать заполнитель, а не имя ввода. Я предлагаю следующую альтернативу

HTML:

<label class="overlabel"> 
    <span>First Name</span>
    <input name="first_name" type="text" />
</label>

JavaScript:

$('.overlabel').each(function () {
    var $this = $(this);
    var field = $this.find('[type=text], [type=file], [type=email], [type=password], textarea');
    var span = $(this).find('> span');
    var onBlur = function () {
        if ($.trim(field.val()) == '') {
            field.val('');
            span.fadeIn(100);
        } else {
            span.fadeTo(100, 0);
        }
    };
    field.focus(function () {
        span.fadeOut(100);
    }).blur(onBlur);
    onBlur();
});

css:

.overlabel {
  border: 0.1em solid;
  color: #aaa;
  position: relative;
  display: inline-block;
  vertical-align: middle;
  min-height: 2.2em;
}
.overlabel span {
  position: absolute;
  left: 0;
  top: 0;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.overlabel span, .overlabel input {
  text-align: left;
  font-size: 1em;
  line-height: 2em;
  padding: 0 0.5em;
  margin: 0;
  background: transparent;
  -webkit-appearance: none; /* prevent ios styling */
  border-width: 0;
  width: 100%;
  outline: 0;
}

Тест:

http://jsfiddle.net/kwynwrcf/

  • 0
    У меня уже есть текст заполнителя. Это не проблема. Я хотел бы, чтобы текст исчезал, когда пользователь нажимает на поле, а не только когда он начинает печатать.
  • 1
    @LondonGuy проверить Редактировать
Показать ещё 5 комментариев
30

Чистое решение для CSS (не требуется JS)

Основываясь на ответах @Hexodus и @Casey Chu, здесь представлено обновленное и кросс-браузерное решение, которое использует непрозрачность CSS и переходы для вытеснения текста заполнителя. Он работает для любого элемента, который может использовать заполнители, включая textarea и теги input.

::-webkit-input-placeholder { opacity: 1; -webkit-transition: opacity .5s; transition: opacity .5s; }  /* Chrome <=56, Safari < 10 */
:-moz-placeholder { opacity: 1; -moz-transition: opacity .5s; transition: opacity .5s; } /* FF 4-18 */
::-moz-placeholder { opacity: 1; -moz-transition: opacity .5s; transition: opacity .5s; } /* FF 19-51 */
:-ms-input-placeholder { opacity: 1; -ms-transition: opacity .5s; transition: opacity .5s; } /* IE 10+ */
::placeholder { opacity: 1; transition: opacity .5s; } /* Modern Browsers */

*:focus::-webkit-input-placeholder { opacity: 0; } /* Chrome <=56, Safari < 10 */
*:focus:-moz-placeholder { opacity: 0; } /* FF 4-18 */
*:focus::-moz-placeholder { opacity: 0; } /* FF 19-50 */
*:focus:-ms-input-placeholder { opacity: 0; } /* IE 10+ */
*:focus::placeholder { opacity: 0; } /* Modern Browsers */

Изменение: обновлено для поддержки современных браузеров.

  • 6
    Лучшее решение CSS!
  • 3
    2017.11.29, работает на chrome, firefox
Показать ещё 1 комментарий
18

Чтобы увеличить ответ "casey-chu" и "pirate rob", здесь более совместимый с браузером способ:

    /* WebKit browsers */
input:focus::-webkit-input-placeholder { color:transparent; }

    /* Mozilla Firefox 4 to 18 */
input:focus:-moz-placeholder { color:transparent; }

    /* Mozilla Firefox 19+ */
input:focus::-moz-placeholder { color:transparent; }

    /* Internet Explorer 10+ */
input:focus:-ms-input-placeholder { color:transparent; }
  • 0
    Именно то, что я написал сейчас (вместо этого я использовал opacity:0; )! Единственное CSS-решение в этой теме со всеми возможными браузерами!
11

Ответ Toni хороший, но я бы предпочел отказаться от ID и явно использовать input, таким образом, все входы с placeholder получат поведение:

<input type="text" placeholder="your text" />

Обратите внимание, что $(function(){ }); является сокращением для $(document).ready(function(){ });:

$(function(){
    $('input').data('holder',$('input').attr('placeholder'));
    $('input').focusin(function(){
        $(this).attr('placeholder','');
    });
    $('input').focusout(function(){
        $(this).attr('placeholder',$(this).data('holder'));
    });
})

Демо-версия

  • 0
    имеет смысл, хорошая точка
  • 3
    Это не работает, если у вас есть более одного поля. Вот расширенная версия вашего кода jsfiddle.net/6CzRq/64
9

Мне нравится упаковывать это в пространство имен и запускать элементы с атрибутом "placeholder"...

$("[placeholder]").togglePlaceholder();

$.fn.togglePlaceholder = function() {
    return this.each(function() {
        $(this)
        .data("holder", $(this).attr("placeholder"))
        .focusin(function(){
            $(this).attr('placeholder','');
        })
        .focusout(function(){
            $(this).attr('placeholder',$(this).data('holder'));
        });
    });
};
  • 3
    Способ более многоразовый :)
4

Иногда вам нужна СПЕЦИФИКАЦИЯ, чтобы убедиться, что ваши стили применяются с самым сильным фактором id Спасибо за @Rob Fletcher за его отличный ответ, в нашей компании мы использовали

Поэтому, пожалуйста, рассмотрите добавление стилей с префиксом id контейнера приложения

    #app input:focus::-webkit-input-placeholder, #app  textarea:focus::-webkit-input-placeholder {
        color: #FFFFFF;
    }

    #app input:focus:-moz-placeholder, #app textarea:focus:-moz-placeholder {
        color: #FFFFFF;
    }
4

Используя SCSS вместе с http://bourbon.io/, это решение прост, элегантен и работает во всех веб-браузерах:

input:focus {
  @include placeholder() {
    color: transparent;
  }
}

Используйте Бурбон! Это хорошо для вас!

4

Мне нравится подход css, приправленный переходами. В фокусе заполнитель исчезает;) Работает также и для текстовых полей.

Спасибо @Casey Chu за отличную идею.

textarea::-webkit-input-placeholder, input::-webkit-input-placeholder { 
    color: #fff;
    opacity: 0.4;
    transition: opacity 0.5s;
    -webkit-transition: opacity 0.5s; 
}

textarea:focus::-webkit-input-placeholder, input:focus::-webkit-input-placeholder  { 
    opacity: 0;
}
4

Для дальнейшего уточнения Wallace Sidhrée пример кода:

$(function()
{  
      $('input').focusin(function()
      {
        input = $(this);
        input.data('place-holder-text', input.attr('placeholder'))
        input.attr('placeholder', '');
      });

      $('input').focusout(function()
      {
          input = $(this);
          input.attr('placeholder', input.data('place-holder-text'));
      });
})

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

Обратитесь к рабочий пример здесь, в jsFiddle.

  • 0
    Это намного лучше
3

Для чистого решения на основе CSS:

input:focus::-webkit-input-placeholder  {color:transparent;}
input:focus::-moz-placeholder   {color:transparent;}
input:-moz-placeholder   {color:transparent;}

Примечание: Пока не поддерживается всеми поставщиками браузеров.

Ссылка: Скрыть текст заполнителя при фокусировке с помощью CSS Илья Райскин.

3

Эта часть CSS работала для меня:

input:focus::-webkit-input-placeholder {
        color:transparent;

}
  • 1
    Это хороший способ сделать это без JQuery :)
2

HTML:

<input type="text" name="name" placeholder="enter your text" id="myInput" />

JQuery

$('#myInput').focus(function(){
  $(this).attr('placeholder','');
});
$('#myInput').focusout(function(){
  $(this).attr('placeholder','enter your text');
});
  • 1
    Это предполагает только один вход.
1

С Pure CSS это сработало для меня. Сделать его прозрачным, когда вводится /Focues во вход

 input:focus::-webkit-input-placeholder { /* Chrome/Opera/Safari */
    color: transparent !important;
 }
 input:focus::-moz-placeholder { /* Firefox 19+ */
   color: transparent !important;
 }
 input:focus:-ms-input-placeholder { /* IE 10+ */
   color: transparent !important;
 }
 input:focus:-moz-placeholder { /* Firefox 18- */
   color: transparent !important;
  }
1

2018> JQUERY v.3.3 РЕШЕНИЕ: Работающая глобальность для всех входных данных, textarea с заполнителем.

 $(function(){
     $('input, textarea').on('focus', function(){
        if($(this).attr('placeholder')){
           window.oldph = $(this).attr('placeholder');
            $(this).attr('placeholder', ' ');
        };
     });

     $('input, textarea').on('blur', function(){
       if($(this).attr('placeholder')){
            $(this).attr('placeholder', window.oldph);
         };
     }); 
});
1
$("input[placeholder]").each(function () {
    $(this).attr("data-placeholder", this.placeholder);

    $(this).bind("focus", function () {
        this.placeholder = '';
    });
    $(this).bind("blur", function () {
        this.placeholder = $(this).attr("data-placeholder");
    });
});
1
$("input[placeholder]").focusin(function () {
    $(this).data('place-holder-text', $(this).attr('placeholder')).attr('placeholder', '');
})
.focusout(function () {
    $(this).attr('placeholder', $(this).data('place-holder-text'));
});
  • 0
    Это не удастся во второй раз, когда вы используете focusin ..
1

для ввода

input:focus::-webkit-input-placeholder { color:transparent; }
input:focus:-moz-placeholder { color:transparent; }

для textarea

textarea:focus::-webkit-input-placeholder { color:transparent; }
textarea:focus:-moz-placeholder { color:transparent; }
1

Демо здесь: jsfiddle

Попробуйте следующее:

//auto-hide-placeholder-text-upon-focus
if(!$.browser.webkit){
$("input").each(
        function(){
            $(this).data('holder',$(this).attr('placeholder'));
            $(this).focusin(function(){
                $(this).attr('placeholder','');
            });
            $(this).focusout(function(){
                $(this).attr('placeholder',$(this).data('holder'));
            });

        });

}
  • 0
    вместо этого используйте $ ("input [placeholder]"), чтобы выбрать только те поля, которые имеют атрибут placeholder.
  • 0
    Это лучший ответ, простой и отменяет выбор других, когда не в фокусе
0

Нет необходимости использовать любой CSS или JQuery. Вы можете сделать это прямо из тега ввода HTML.

Например, в нижнем почтовом ящике текст заполнителя исчезнет после щелчка внутри, а текст появится снова, если щелкнуть снаружи.

<input type="email" placeholder="Type your email here..." onfocus="this.placeholder=''" onblur="this.placeholder='Type your email here...'">
0

То же самое, что я применил в угловом 5.

я создал новую строку для хранения заполнителя

newPlaceholder:string;

то я использовал функции фокуса и размытия на поле ввода (я использую автозаполнение).

Над местозаполнителем устанавливается из машинописного текста

Две функции, которые я использую -

/* Event fired on focus to textbox*/
Focus(data) {
    this.newPlaceholder = data.target.placeholder;
    this.placeholder = '';
}
/* Event fired on mouse out*/
Blur(data) {
    this.placeholder = this.newPlaceholder;
}
0
/* Webkit */
[placeholder]:focus::-webkit-input-placeholder { opacity: 0; }
/* Firefox < 19 */
[placeholder]:focus:-moz-placeholder { opacity: 0; }
/* Firefox > 19 */
[placeholder]:focus::-moz-placeholder { opacity: 0; }
/* Internet Explorer 10 */
[placeholder]:focus:-ms-input-placeholder { opacity: 0; }
  • 0
    Этот ответ идентичен предыдущему ответу. Если у вас есть что добавить или улучшить, предложите изменить исходный ответ.
0

попробуйте эту функцию:

+ Он скрывает PlaceHolder в фокусе и возвращает его обратно на размытие

+ Эта функция зависит от селектора-заполнителя, сначала он выбирает элементы с атрибутом placeholder, запускает функцию фокусировки, а другую - при размывании.

в фокусе: он добавляет атрибут "data-text" к элементу, который получает его значение из атрибута placeholder, затем удаляет значение атрибута placeholder.

on blur: возвращает значение placeholder и удаляет его из атрибута data-text

<input type="text" placeholder="Username" />
$('[placeholder]').focus(function() {
    $(this).attr('data-text', $(this).attr('placeholder'));
    $(this).attr('placeholder', '');
  }).blur(function() {
      $(this).attr('placeholder', $(this).attr('data-text'));
      $(this).attr('data-text', '');
  });
});

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

0

Помимо всего вышеизложенного, у меня есть две идеи.

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

Но он настолько сложный, другой использует селектор брата css. Просто так:

.placeholder { position: absolute; font-size: 14px; left: 40px; top: 11px; line-height: 1; pointer-events: none; }
.send-message input:focus + .placeholder { display: none; } 

23333, у меня плохой английский. Надеюсь решить вашу проблему.

  • 0
    Пожалуйста, проверьте этот URL, это будет полезно для повышения качества вашего контента;

Ещё вопросы

Сообщество Overcoder
Наверх
Меню