Як автоматично приховати текст заповнювача у фокусі за допомогою css або jquery?


213

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

Я здогадуюсь, що мені потрібно спеціально націлити Chrome .

Будь-які рішення?

Якщо не з CSS , то з jQuery ?

З повагою.


Цекк мою редакцію тоді, це може допомогти
Тоні Мішель Кабе,

Opera також є іншим браузером, який знімає заповнення заповнення у фокусі.
Лукас

Firefox версії 15 більше не видаляє текст заповнення, поки ви не почнете вводити текст. Я вважаю, що це може бути і з IE10, але я не маю можливості це підтвердити.
Роб Флетчер

1
Я стурбований тим, що ніхто не згадував про те, що ви не повинні займатись зміною поведінки на веб-переглядачах. Я, наприклад, віддаю перевагу тому, щоб заповнювач запасів залишався присутнім. Це просто допомагає мені як кінцевому користувачу, і це особливість, яку браузери зараз починають впроваджувати ... можливо, тому, що поведінка зникнення на фокусі виявилася проблемою зручності використання. Нехай браузер буде, будь ласка.
Райан Уіл

"Це робиться автоматично для кожного браузера, крім Chrome." Більше не? Я тільки що спробував це на OSX в Firefox 37.0.2, Safari 7.1.5 та Chrome 42.0. Жоден із них не видаляє текст заповнення, поки я не почну вводити текст, і всі вони повернуть його назад, коли я очищую поле.
Натан Лонг

Відповіді:


261
<input 
type="text" 
placeholder="enter your text" 
onfocus="this.placeholder = ''"
onblur="this.placeholder = 'enter your text'" />

2
Це змушує йти, але коли я відхиляюсь від поля, він залишається порожнім.
LondonGuy

2
@LondonGuy: Просто відредагував мою публікацію, побачиш, чи працює вона так, як ти хотів. Але рішення Тоні Мішеля Каубе приємніше
MatuDuke

9
Проблема тут у тому, що це нав'язливий JavaScript. Рішення Тоні Мішеля Каубе краще.
Silkster

Мені це подобається, але, на жаль, він не працює ні IE, ні Safari.
Мухаммед Мустафа


455

Редагувати: Усі веб-переглядачі підтримують зараз

input:focus::placeholder {
  color: transparent;
}
<input type="text" placeholder="Type something here!">

Firefox 15 і IE 10+ також підтримують це зараз. Для розширення 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+ */

1
Чудова відповідь! Я не бачу особливого сенсу відмовлятися від свого старого рішення jQuery на користь HTML5, а потім рухайтесь прямо вперед і додайте JavaScript назад як виправлення. Це просто рішення, яке я шукав.
nienn

@MartinHunt Ви пробували це на FF? вхід: фокус :: - moz-placeholder
Філіп

16
Вибачте за виривання старої нитки, але просто для того, щоб зробити це більш повним: input: focus: -moz-placeholder призначений для Firefox 18 і нижче, для 19 і далі вам потрібно використовувати: input: focus :: - moz-placeholder (зверніть увагу подвійна кишка). Ref: css-tricks.com/snippets/css/style-placeholder-text
Пітер Льюїс

цей коментар - виграш. працює з динамічними елементами управління, як і кендо
рефлог

1
Чудова відповідь також від мене! Для тих із нас, хто також може вимагати цього функціоналу, коли поле тут відключено, є код CSS: / * Приховування тексту заповнювача (якщо такий є), коли поле утримування вимкнено * / input: disabled :: - webkit-input- заповнювач {колір: прозорий; } вхід: відключено: -moz-заповнювач {колір: прозорий; } вхід: відключено :: - moz-placeholder {color: transparent; } вхід: вимкнено: -ms-input-placeholder {color: transparent; }
Ramanagom

74

Ось лише рішення CSS (поки що працює лише у WebKit):

input:focus::-webkit-input-placeholder {
    opacity: 0;
}

1
Мені подобається ця відповідь, але підтримка браузера для цього просто ще не існує.
Джеррі

44

Чистий 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!
Fatih SARI

Старий добрий CSS ... чудове просте рішення! Чому я не думав про це ??
JI-Web

40

ви спробували заповнити 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/


Приємно бачити використовуваний атрибут даних. Але я б дивився на еквівалент CSS. При кешуванні це буде швидшим рішенням і може бути глобальним. Вищезазначене потребує розміщення атрибута даних для кожного необхідного елемента. (відповідь нижче)
Ніл

1
Це є надскладним. Можна зробити з набагато меншим кодом.
JGallardo

@JGallardo покажи мені світло (але я не впевнений, чи ти бачив, що є 3 різні рішення)
Toni Michel Caubet

19

Щоб збільшити відповідь @ casey-chu та піратського грабу, ось більш сумісний спосіб для браузера:

    /* 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; }

Саме те, що я написав зараз (замість цього я використав opacity:0;)! Єдине рішення CSS у цій темі з усіма можливими підтримками браузера!
ReynekeVosz

11

Відповідь Тоні хороша, але я б краще відмовитись 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'));
    });
})

Демо


3
Це не працює, якщо у вас є більше одного поля. Ось покращена версія вашого коду jsfiddle.net/6CzRq/64
svlada

10

Мені подобається упакувати це в простір імен і працювати на елементах з атрибутом "заповнювач" ...

$("[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'));
        });
    });
};

5

Іноді вам потрібна СПЕЦИФІЧНІСТЬ, щоб переконатися, що ваші стилі застосовуються з найсильнішим факторомid Дякуємо @Rob Fletcher за його чудову відповідь, в нашій компанії ми використовували

Тому, будь ласка, подумайте про додавання стилів з префіксом ідентифікатора контейнера додатків

    #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;
    }


5

З Pure CSS це працювало для мене. Зробіть його прозорим при введенні / фокусування вхідних даних

 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;
  }

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 .


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

Використовуючи SCSS разом із http://bourbon.io/ , це рішення є простим, елегантним та працює у всіх веб-браузерах:

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

Використовуйте Бурбон! Це добре для вас!


3

Цей фрагмент CSS працював для мене:

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

}

1
Це приємний спосіб зробити це без JQuery :)
tehX


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
Це передбачає лише один вхід.
нім

2

2018> JQUERY v.3.3 РІШЕННЯ: Робота в глобальному масштабі для всіх матеріалів, текстових областей із заповнювачем.

 $(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

Демо тут: 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'));
            });

        });

}

використовуйте замість $ ("input [placeholder]") лише для вибору полів, які мають атрибут placeholder.
Silkster

Це найкраща відповідь, проста та
скасовує

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
$("input[placeholder]").focusin(function () {
    $(this).data('place-holder-text', $(this).attr('placeholder')).attr('placeholder', '');
})
.focusout(function () {
    $(this).attr('placeholder', $(this).data('place-holder-text'));
});

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");
    });
});

0

Крім усього вищезазначеного, у мене є дві ідеї.

Ви можете додати елемент, що імітує доробку пальця. Потім за допомогою 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, у мене погана англійська мова. Сподіваємося вирішити вашу проблему.


Перевірте цю URL-адресу , щоб корисно було підвищити якість вмісту;
Віллі Ченг

0

спробуйте цю функцію:

+ Він приховує фокус PlaceHolder і повертає його назад на розмиття

+ Ця функція залежить від селектора заповнення заповнення, спочатку вона вибирає елементи з атрибутом заповнювача, запускає функцію на фокусування, а іншу - на розмивання.

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

on blur: він повертає значення заповнення місця та видаляє його з атрибута 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

Те саме, що я застосував у кутовій 5.

я створив нову рядок для зберігання заповнювача

newPlaceholder:string;

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

Вище заповнювач заповнюється з typecript

Дві функції, які я використовую -

/* 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

Не потрібно використовувати будь-який CSS або JQuery. Це можна зробити прямо з тегу введення HTML.

Наприклад , у поле нижче електронної пошти текст заповнювача зникне після клацання всередині, а текст з’явиться знову, якщо натиснути зовні.

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

-1
/* 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; }

Ця відповідь ідентична попередній відповіді. Якщо у вас є що додати або покращити, запропонуйте редагувати оригінальну відповідь.
JonathanDavidArndt
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.