Jak sprawić, by pole tekstowe HTML pokazywało podpowiedź, gdy jest puste?

Chcę, aby pole wyszukiwania na mojej stronie internetowej wyświetlało Słowo "Szukaj" szarą kursywą. Gdy pole otrzymuje fokus, powinno wyglądać jak puste pole tekstowe. Jeśli w nim jest już tekst, powinien on wyświetlać tekst normalnie (Czarny, Nie kursywy). Pomoże mi to uniknąć bałaganu, usuwając Etykietę.

BTW, to jest strona Ajax search, więc nie ma przycisku.

Author: Drew Noakes, 2008-09-20

20 answers

Inną opcją, jeśli chcesz mieć tę funkcję tylko dla nowszych przeglądarek, jest użycie wsparcia oferowanego przez atrybut placeholder HTML 5:

<input name="email" placeholder="Email Address">

W przypadku braku jakichkolwiek stylów, w Chrome wygląda to następująco:

Tutaj wpisz opis obrazka

Możesz wypróbować dema tutaj i w HTML5 Placeholder Styling with CSS.

Należy sprawdzić zgodność tej funkcji w przeglądarce. Wsparcie w Firefoksie zostało dodane w 3.7. Chrome jest w porządku. Internet Explorer dodał obsługę tylko w 10. Jeśli kierujesz przeglądarkę, która nie obsługuje elementów zastępczych wprowadzania, możesz użyć wtyczki jQuery o nazwie jQuery HTML5 Placeholder, a następnie po prostu dodać następujący kod JavaScript, aby go włączyć.

$('input[placeholder], textarea[placeholder]').placeholder();
 334
Author: Drew Noakes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-20 18:46:55

, który jest znany jako znak wodny textbox, i odbywa się za pomocą JavaScript.

Lub jeśli używasz jQuery, znacznie lepsze podejście:

 91
Author: naspinski,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-08 03:08:40

Możesz ustawić symbol zastępczy za pomocą placeholder atrybut W HTML (obsługa przeglądarki ). font-style i color mogą być zmienione za pomocą CSS (chociaż obsługa przeglądarki jest ograniczona).

input[type=search]::-webkit-input-placeholder { /* Safari, Chrome(, Opera?) */
 color:gray;
 font-style:italic;
}
input[type=search]:-moz-placeholder { /* Firefox 18- */
 color:gray;
 font-style:italic;
}
input[type=search]::-moz-placeholder { /* Firefox 19+ */
 color:gray;
 font-style:italic;
}
input[type=search]:-ms-input-placeholder { /* IE (10+?) */
 color:gray;
 font-style:italic;
}
<input placeholder="Search" type="search" name="q">
 40
Author: 0b10011,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-18 18:01:59

Możesz dodawać i usuwać specjalną klasę CSS i modyfikować wartość wejściową onfocus/onblur z JavaScript:

<input type="text" class="hint" value="Search..."
    onfocus="if (this.className=='hint') { this.className = ''; this.value = ''; }"
    onblur="if (this.value == '') { this.className = 'hint'; this.value = 'Search...'; }">

Następnie określ klasę hint ze stylami, które chcesz w CSS, na przykład:

input.hint {
    color: grey;
}
 20
Author: levik,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-14 16:23:17

Najlepszym sposobem jest połączenie zdarzeń JavaScript za pomocą jakiejś biblioteki JavaScript, takiej jak jQuery lub YUI i umieszczenie kodu w zewnętrznym .js-file.

Ale jeśli chcesz szybkiego i brudnego rozwiązania, jest to twoje wbudowane rozwiązanie HTML:

<input type="text" id="textbox" value="Search"
    onclick="if(this.value=='Search'){this.value=''; this.style.color='#000'}" 
    onblur="if(this.value==''){this.value='Search'; this.style.color='#555'}" />

Zaktualizowano : Dodano żądaną kolorystykę.

 6
Author: Seb Nilsson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-14 16:25:10

Jakiś czas temu opublikowałem rozwiązanie tego problemu na mojej stronie. Aby go użyć, zaimportuj pojedynczy plik .js:

<script type="text/javascript" src="/hint-textbox.js"></script>

Następnie Adnotuj dowolne wejścia, które chcesz mieć podpowiedzi za pomocą klasy CSS hintTextbox:

<input type="text" name="email" value="enter email" class="hintTextbox" />

Więcej informacji i przykład są dostępne tutaj .

 4
Author: Drew Noakes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-06-08 04:10:31

Oto funkcjonalny przykład z Google Ajax library cache i trochę magii jQuery.

To będzie CSS:

<style type="text/stylesheet" media="screen">
    .inputblank { color:gray; }  /* Class to use for blank input */
</style>

To byłby kod JavaScript:

<script language="javascript"
        type="text/javascript"
        src="http://www.google.com/jsapi">
</script>
<script>
    // Load jQuery
    google.load("jquery", "1");

    google.setOnLoadCallback(function() {
        $("#search_form")
            .submit(function() {
                alert("Submitted. Value= " + $("input:first").val());
                return false;
        });

        $("#keywords")
            .focus(function() {
                if ($(this).val() == 'Search') {
                    $(this)
                    .removeClass('inputblank')
                    .val('');
                }
            })
            .blur(function() {
                if ($(this).val() == '') {
                    $(this)
                    .addClass('inputblank')
                    .val('Search');
                }
            });
    });
</script>

A to byłby HTML:

<form id="search_form">
    <fieldset>
        <legend>Search the site</legend>
            <label for="keywords">Keywords:</label>
        <input id="keywords" type="text" class="inputblank" value="Search"/>
    </fieldset>
</form>

Mam nadzieję, że to wystarczy, aby zainteresować zarówno GAJAXLibs i w jQuery.

 3
Author: Gustavo Carreno,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-14 16:32:54

Teraz to staje się bardzo proste. W html możemy podać atrybut placeholder dla elementów input .

Np.

<input type="text" name="fst_name" placeholder="First Name"/>

Sprawdź więcej szczegółów: http://www.w3schools.com/tags/att_input_placeholder.asp

 3
Author: apm,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-29 17:11:13

Dla użytkowników jQuery: naspinski ' s jQuery link wydaje się uszkodzony, ale spróbuj tego: http://remysharp.com/2007/01/25/jquery-tutorial-text-box-hints/

Otrzymasz darmowy samouczek wtyczki jQuery jako bonus. :)

 2
Author: tuomassalo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-05-10 16:56:50

Znalazłem wtyczkę jQueryjQuery Watermark być lepszym niż ten wymieniony w górnej odpowiedzi. Dlaczego lepiej? Ponieważ obsługuje pola wprowadzania haseł. Ponadto ustawienie koloru znaku wodnego (lub innych atrybutów) jest tak proste, jak utworzenie odniesienia .watermark w pliku CSS.

 2
Author: Dustin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-14 14:57:20

To się nazywa "znak wodny".

Znalazłem wtyczkę jQueryjQuery watermark która, w przeciwieństwie do pierwszej odpowiedzi, nie wymaga dodatkowej konfiguracji(oryginalna odpowiedź wymaga również specjalnego wywołania przed wysłaniem formularza).

 2
Author: elcuco,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-16 07:06:22

Użyj jQuery Form Notifier - jest to jedna z najpopularniejszych wtyczek jQuery i nie cierpi z powodu błędów niektórych innych sugestii jQuery tutaj (na przykład możesz dowolnie stylować znak wodny, nie martwiąc się, czy zostanie zapisany do bazy danych).

JQuery Watermark używa pojedynczego stylu CSS bezpośrednio na elementach formularza (zauważyłem, że właściwości rozmiaru czcionki CSS zastosowane do znaku wodnego również wpłynęły na pola tekstowe - nie to, czego chciałem). Plus z jQuery Znak wodny to możliwość przeciągania i upuszczania tekstu na pola (jQuery Form Notifier na to nie pozwala).

Kolejny sugerowany przez innych (ten na digitalbrush.com), przypadkowo prześle wartość znaku wodnego do formularza, więc zdecydowanie odradzam.

 2
Author: Kimball Robinson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-16 07:08:58

Użyj obrazka tła do renderowania tekstu:

 input.foo { }
 input.fooempty { background-image: url("blah.png"); }

Następnie wystarczy wykryć value == 0 i zastosować odpowiednią klasę:

 <input class="foo fooempty" value="" type="text" name="bar" />

A kod JavaScript Jquery wygląda tak:

jQuery(function($)
{
    var target = $("input.foo");
    target.bind("change", function()
    {
        if( target.val().length > 1 )
        {
            target.addClass("fooempty");
        }
        else
        {
            target.removeClass("fooempty");
        }
    });
});
 1
Author: Kent Fredric,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-14 16:26:51

Możesz łatwo mieć pole odczytu "Szukaj", a następnie gdy fokus zostanie zmieniony na niego, Usuń Tekst. Coś takiego:

<input onfocus="this.value=''" type="text" value="Search" />

Oczywiście jeśli to zrobisz, tekst użytkownika zniknie po kliknięciu. Więc pewnie chcesz użyć czegoś bardziej wytrzymałego:

<input name="keyword_" type="text" size="25"  style="color:#999;" maxlength="128" id="keyword_"
onblur="this.value = this.value || this.defaultValue; this.style.color = '#999';"
onfocus="this.value=''; this.style.color = '#000';"
value="Search Term">
 1
Author: Steve Kemp,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-27 11:31:56

Gdy strona zostanie załadowana po raz pierwszy, w polu tekstowym pojawi się wyszukiwanie w kolorze szarym, jeśli chcesz.

Gdy pole wprowadzania otrzymuje fokus, Zaznacz cały tekst w polu wyszukiwania, aby użytkownik mógł po prostu zacząć wpisywać, co spowoduje usunięcie zaznaczonego tekstu w procesie. Będzie to również działać dobrze, jeśli użytkownik chce użyć pola wyszukiwania po raz drugi, ponieważ nie będzie musiał ręcznie podświetlać poprzedniego tekstu, aby go usunąć.

<input type="text" value="Search" onfocus="this.select();" />
 0
Author: 17 of 26,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-20 14:15:54

Podoba mi się rozwiązanie "Knowledge Chikuse" - proste i jasne. Wystarczy dodać wywołanie blur, gdy ładowanie strony jest gotowe, które ustawi stan początkowy:

$('input[value="text"]').blur();
 0
Author: Isaac Liu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-11 05:07:58

Chcesz przypisać coś takiego do onfocus:

if (this.value == this.defaultValue)
    this.value = ''
this.className = ''

I to do onblura:

if (this.value == '')
    this.value = this.defaultValue
this.className = 'placeholder'

(możesz użyć czegoś sprytniejszego, jak funkcja frameworku, aby zmienić nazwę klasy, jeśli chcesz.)

Z takim CSS:

input.placeholder{
    color: gray;
    font-style: italic;
}
 0
Author: Dan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-14 16:20:17
$('input[value="text"]').focus(function(){ 
if ($(this).attr('class')=='hint') 
{ 
   $(this).removeClass('hint'); 
   $(this).val(''); 
}
});

$('input[value="text"]').blur(function(){
  if($(this).val() == '')
  {
    $(this).addClass('hint');
    $(this).val($(this).attr('title'));
  } 
});

<input type="text" value="" title="Default Watermark Text">
 -1
Author: Drew Noakes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-09-09 22:18:56

Prosty znacznik Html 'required' jest przydatny.

<form>
<input type="text" name="test" id="test" required>
<input type="submit" value="enter">
</form>
 -1
Author: Pradeep,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-07 04:59:26

Użytkownik AJAXToolkit z http://asp.net

 -3
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-07 02:17:01