Jak automatycznie ukryć tekst zastępczy po aktywowaniu za pomocą css lub jquery?

213

Odbywa się to automatycznie dla każdej przeglądarki oprócz Chrome .

Chyba muszę specjalnie celować w Chrome .

Jakieś rozwiązania?

Jeśli nie z CSS , to z jQuery ?

Z poważaniem.

LondonGuy
źródło
no cóż, wtedy moja edycja może pomóc
Toni Michel Caubet
Opera to także kolejna przeglądarka, która usuwa zmienne zastępcze.
Lucas
Firefox od wersji 15 nie usuwa już tekstu zastępczego, dopóki nie zaczniesz pisać. Myślę, że to samo może dotyczyć IE10, ale nie mam sposobu, aby to sprawdzić.
Rob Fletcher
1
Obawiam się, że nikt nie wspomniał o tym, że nie powinieneś zawracać sobie głowy modyfikowaniem natywnych zachowań przeglądarki. Dla jednego wolę, aby symbol zastępczy pozostał obecny. Pomaga mi to jako użytkownik końcowy i jest to funkcja, którą przeglądarki zaczynają teraz wdrażać ... prawdopodobnie dlatego, że zachowanie polegające na zniknięciu po skupieniu okazało się problemem użyteczności. Niech przeglądarka będzie.
Ryan Wheale 11.01.2013
„Odbywa się to automatycznie dla każdej przeglądarki oprócz Chrome”. Nigdy więcej? Właśnie próbowałem tego na OSX w Firefox 37.0.2, Safari 7.1.5 i Chrome 42.0. Żaden z nich nie usuwa tekstu zastępczego, dopóki nie zacznę pisać, a wszystkie z nich odkładają go z powrotem, gdy wyczyszczę pole.
Nathan Long

Odpowiedzi:

261
<input 
type="text" 
placeholder="enter your text" 
onfocus="this.placeholder = ''"
onblur="this.placeholder = 'enter your text'" />
MatuDuke
źródło
2
To sprawia, że ​​odchodzi, ale kiedy klikam poza polem, pozostaje pusty.
LondonGuy,
2
@LondonGuy: Właśnie edytowałem mój post, zobacz, czy działa tak, jak chcesz. Ale rozwiązanie Toni Michel Caubet jest ładniejsze
MatuDuke
9
Problem w tym, że jest to natrętny JavaScript. Rozwiązanie Toni Michel Caubet jest lepsze.
Silkster,
Podoba mi się, ale niestety nie działa ani w IE, ani w Safari.
Mohammed Moustafa
455

Edycja: wszystkie przeglądarki obsługują teraz

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

Firefox 15 i IE 10+ obsługują to teraz. Aby rozwinąć rozwiązanie CSS Casey Chu :

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+ */
Rob Fletcher
źródło
1
Świetna odpowiedź! Nie widzę sensu, by porzucać moje stare rozwiązanie jQuery na rzecz HTML5, a następnie śmiało dodać JavaScript jako poprawkę. Właśnie takiego rozwiązania szukałem.
nienn
@MartinHunt próbowałeś tego na FF? input: focus :: - moz-placeholder
Philip
16
Przepraszamy za pogłębienie starego wątku, ale tylko po to, by uczynić go bardziej kompletnym: input: focus: -moz-placeholder jest dla Firefoksa 18 i niższych, dla 19 lat musisz użyć: input: focus :: - moz-placeholder (uwaga dwukropek). Ref: css-tricks.com/snippets/css/style-placeholder-text
Peter Lewis
ten komentarz jest wygrany. współpracuje z dynamicznymi kontrolkami, takimi jak kendo
reflog
1
Świetna odpowiedź także ode mnie! Dla tych z nas, którzy mogą również wymagać tej funkcji, gdy pole jest wyłączone, znajduje się tutaj kod CSS: / * Ukrywanie tekstu zastępczego (jeśli istnieje), gdy pole trzymania jest wyłączone * / input: disabled :: - webkit-input- symbol zastępczy {kolor: przezroczysty; } input: disabled: -moz-placeholder {color: transparent; } input: disabled :: - moz-placeholder {color: transparent; } input: disabled: -ms-input-placeholder {color: transparent; }
Ramanagom,
74

Oto rozwiązanie tylko dla CSS (na razie działa tylko w WebKit):

input:focus::-webkit-input-placeholder {
    opacity: 0;
}
Casey Chu
źródło
1
Podoba mi się ta odpowiedź, ale obsługa przeglądarki po prostu jej jeszcze nie ma.
Jerry
44

Rozwiązanie Pure CSS (nie wymaga JS)

Opierając się na odpowiedziach @Hexodus i @Casey Chu, oto zaktualizowane rozwiązanie dla wielu przeglądarek, które wykorzystuje nieprzezroczystość CSS i przejścia, aby usunąć tekst zastępczy. Działa dla każdego elementu, który może używać symboli zastępczych, w tym textareai inputtagów.

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

Edycja: Zaktualizowano w celu obsługi nowoczesnych przeglądarek.

JamesWilson
źródło
6
Najlepsze rozwiązanie CSS!
Fatih SARI
Dobry stary CSS ... świetne proste rozwiązanie! Dlaczego o tym nie pomyślałem?
JI-Web,
40

próbowałeś placeholder attr?

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

-EDYTOWAĆ-

Rozumiem, spróbuj tego następnie:

$(function () {

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

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


});

Test: http://jsfiddle.net/mPLFf/4/

-EDYTOWAĆ-

W rzeczywistości, ponieważ do opisu wartości należy użyć symbolu zastępczego, a nie nazwy danych wejściowych. Sugeruję następującą alternatywę

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

Test:

http://jsfiddle.net/kwynwrcf/

Toni Michel Caubet
źródło
Miło widzieć używany atrybut danych. Ale spojrzałbym na odpowiednik CSS. Po zapisaniu w pamięci podręcznej będzie to szybsze rozwiązanie i może mieć zasięg globalny. Powyższe wymaga umieszczenia atrybutu danych na każdym potrzebnym elemencie. (odpowiedź poniżej)
Neil
1
To jest skomplikowane. Można to zrobić przy znacznie mniejszym kodzie.
JGallardo
@JGallardo pokaż mi światło (ale nie jestem pewien, czy widziałeś 3 różne rozwiązania)
Toni Michel Caubet
19

Aby rozszerzyć odpowiedź @ casey-chu i pirackiego robota, oto sposób kompatybilny z wieloma przeglądarkami:

    /* 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; }
Adrian Föder
źródło
Dokładnie to, co teraz napisałem (zamiast tego użyłem opacity:0;)! Jedyne rozwiązanie CSS w tym wątku ze wszystkimi możliwymi przeglądarkami!
ReynekeVosz,
11

Odpowiedź Toni jest dobra, ale wolę porzucić IDi jawnie użyć input, w ten sposób wszystkie dane wejściowe z placeholderzachowaniem:

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

Zauważ, że $(function(){ });jest to skrót dla $(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'));
    });
})

Próbny.

Wallace Sidhrée
źródło
3
To nie działa, jeśli masz więcej niż jedno pole. Oto ulepszona wersja twojego kodu jsfiddle.net/6CzRq/64
svlada
10

Lubię spakować to w przestrzeni nazw i uruchomić na elementach z atrybutem „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'));
        });
    });
};
martinedwards
źródło
5

Czasami potrzebujesz SPECYFIKACJI, aby mieć pewność, że twoje style zostaną zastosowane w najsilniejszy sposób. idDziękujemy za @Rob Fletcher za wspaniałą odpowiedź, w naszej firmie zastosowaliśmy

Zastanów się więc nad dodaniem stylów poprzedzonych identyfikatorem kontenera aplikacji

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

Mahdi Alkhatib
źródło
5

Z Pure CSS zadziałało dla mnie. Uczyń go przezroczystym, gdy wprowadzono / Focues na wejściu

 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;
  }
Muhammad Bilawal
źródło
4

Aby dodatkowo udoskonalić próbkę kodu Wallace'a 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'));
      });
})

Zapewnia to, że każde wejście zapisuje poprawny tekst zastępczy w atrybucie danych.

Zobacz działający przykład tutaj w jsFiddle .

trueton
źródło
4

Podoba mi się podejście css doprawione przejściami. Na Focus symbol zastępczy zanika;) Działa również w obszarach tekstowych.

Dzięki @Casey Chu za świetny pomysł.

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;
}
Hexodus
źródło
4

Korzystając z SCSS wraz z http://bourbon.io/ , to rozwiązanie jest proste, eleganckie i działa we wszystkich przeglądarkach internetowych:

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

Użyj Bourbon! To dobrze dla ciebie !

Michael
źródło
3

Ten kawałek CSS działał dla mnie:

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

}
Alex Bondor
źródło
1
To
dobry
3

W przypadku rozwiązania opartego wyłącznie na CSS:

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

Uwaga: nie jest jeszcze obsługiwany przez wszystkich dostawców przeglądarek.

Odniesienie: Ukryj tekst zastępczy w centrum uwagi za pomocą CSS Ilia Raiskin.

Toran Billups
źródło
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');
});
Uffo
źródło
1
Zakłada to tylko jedno wejście.
nym
2

2018> JQUERY v.3.3 ROZWIĄZANIE: Działa globalnie dla wszystkich danych wejściowych, obszaru tekstowego z symbolem zastępczym.

 $(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);
         };
     }); 
});
Karel Sniper Žák
źródło
1

Demo jest tutaj: jsfiddle

Spróbuj tego :

//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'));
            });

        });

}
Suresh Pattu
źródło
zamiast tego użyj $ („input [symbol zastępczy]”), aby wybrać tylko pola, które mają atrybut symbolu zastępczego.
Silkster,
To najlepsza odpowiedź, prosta i odznacza pozostałe, gdy jest nieostra
JGallardo
1

na wejście

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

dla textarea

textarea:focus::-webkit-input-placeholder { color:transparent; }
textarea:focus:-moz-placeholder { color:transparent; }
Wagh
źródło
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'));
});
OsBen
źródło
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");
    });
});
hadi
źródło
0

Oprócz wszystkich powyższych mam dwa pomysły.

Możesz dodać element imitujący symbol zastępczy. Następnie za pomocą javascript steruj wyświetlaniem i ukrywaniem elementu.

Ale jest tak skomplikowane, że drugi używa selektora brata cs. Tak po prostu:

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

23333, Mam słabą znajomość języka angielskiego. Mam nadzieję, że rozwiążę Twój problem.

dufemeng
źródło
Sprawdź ten adres URL , przydatne będzie podniesienie jakości treści;
Willie Cheng
0

spróbuj tej funkcji:

+ Ukrywa PlaceHolder po ustawieniu ostrości i zwraca go ponownie po rozmyciu

+ Ta funkcja zależy od selektora symboli zastępczych, najpierw wybiera elementy z atrybutem symbolu zastępczego, uruchamia funkcję skupiania, a drugą funkcję rozmycia.

w centrum uwagi: dodaje atrybut „data-text” do elementu, który pobiera swoją wartość z atrybutu zastępczego, a następnie usuwa wartość atrybutu zastępczego.

przy rozmyciu: zwraca wartość zastępczą i usuwa ją z atrybutu 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', '');
  });
});

możesz śledzić mnie bardzo dobrze, jeśli spojrzysz na to, co dzieje się za kulisami, sprawdzając element wejściowy

Wael Assaf
źródło
0

To samo zastosowałem w kątowniku 5.

utworzyłem nowy ciąg do przechowywania symboli zastępczych

newPlaceholder:string;

następnie użyłem funkcji skupienia i rozmycia w polu wprowadzania (korzystam z autouzupełniania Prime).

Powyższy symbol zastępczy jest ustawiany z maszynopisu

Korzystam z dwóch funkcji -

/* 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;
}
Rohit Grover
źródło
0

Nie musisz używać żadnego CSS ani JQuery. Możesz to zrobić bezpośrednio ze znacznika wejściowego HTML.

Na przykład w polu poniżej wiadomości e-mail tekst zastępczy zniknie po kliknięciu wewnątrz, a tekst pojawi się ponownie po kliknięciu na zewnątrz.

<input type="email" placeholder="Type your email here..." onfocus="this.placeholder=''" onblur="this.placeholder='Type your email here...'">
Soczysty Islam
źródło
-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; }
maPer77
źródło
Ta odpowiedź jest identyczna z poprzednią odpowiedzią. Jeśli masz coś do dodania lub ulepszenia, zasugeruj edycję oryginalnej odpowiedzi.
JonathanDavidArndt