2010-07-25 27 views
10

ok, dzisiaj tworzę pomocniczą funkcję HTML. Wygląda to tak:HTML input onfocus i onblur?

function Input($name,$type,$lable,$value= null){ 
    if (isset($value)) { 
    //if (this.value=='search') this.value = '' 
    echo '<label for="'. $name .'">'. $lable .'</label><input type="'.$type.'" name="'. $name .'" id="'. $name .'" value="'.$value.'" onfocus="if (this.value==\''.$value.'\') this.value = \'\' "/>'; 
    } 
    if (!isset($value)) { 
    echo '<label for="'. $name .'">'. $lable .'</label><input type="'.$type.'" name="'. $name .'" id="'. $name .'" />'; 
    } 
} 

Jak widać, jeśli wstawić wartość to zrobi jakąś JavaScript, tak aby po kliknięciu pola, tekst wewnątrz pola zniknie,

Pytanie: Jak możemy sprawić, by wartość była wtedy, gdy nie jesteśmy na wejściu? (proszę spojrzeć na pole wyszukiwania na stackoverflow, jednak ten, który jest na stackoverflow nie wraca po tym, jak nie wskazujemy na pole wejściowe? Może używając onblur? Mam rację?

Mam nadzieję, że rozumiesz, co ja myśli.

ok poniewaz niektórzy z was nie dostają tego, co mam na myśli proszę zobaczyć

kiedy im nie klikając go.

alt text http://img39.imageshack.us/img39/4128/48048759.png

kiedy im klikam.

alt text http://img691.imageshack.us/img691/4485/94918020.png

kiedy im nie klikając go ponownie.

alt text http://img691.imageshack.us/img691/4485/94918020.png

powinno być

kiedy im nie klikając go.

alt text http://img39.imageshack.us/img39/4128/48048759.png

kiedy im klikając go.

alt text http://img691.imageshack.us/img691/4485/94918020.png

kiedy im nie klikając go ponownie.

alt text http://img39.imageshack.us/img39/4128/48048759.png

+0

dziękuję gertG za naprawienie. –

+0

Twoje obrazy zniknęły. Powinieneś przesłać je zamiast tego – mplungjan

Odpowiedz

29

Chcesz ten

<input ... 
onfocus="if (this.value==this.defaultValue) this.value = ''" 
onblur="if (this.value=='') this.value = this.defaultValue" /> 

Update: Niektóre nowsze przeglądarki będą robić to, co chcesz po prostu dodając atrybut zastępczy:

<input placeholder="Please enter your name" /> 

Tutaj jest PHP zgodnie z kodem

echo <<<END 
<label for="$name">$lable</label> 
<input type="$type" name="$name" id="$name" value="$value" 
onfocus="if (this.value==this.defaultValue) this.value = ''" 
onblur="if (this.value=='') this.value = this.defaultValue"/> 
END; 
+0

tak powinno to wyglądać tak :), pozwól mi najpierw go zbadać :) –

+0

nadal mam pewne problemy. 'echo ' '; ' to będzie jak '' –

+0

'echo '';' work! thanks –

3

Jeśli dobrze rozumiem, SO wykorzystuje tę linię HTML zrobić ten efekt.

<input name="q" class="textbox" tabindex="1" onfocus="if (this.value=='search') this.value = ''" type="text" maxlength="80" size="28" value="search"> 

Nie ma związku z pytaniem, ale można i należy zastąpić drugie oświadczenie z innym wyrażeniem.

function Input($name,$type,$lable,$value= null){ 
    if (isset($value)) { 
    //if (this.value=='search') this.value = '' 
    echo '<label for="'. $name .'">'. $lable .'</label><input type="'.$type.'" name="'. $name .'" id="'. $name .'" value="'.$value.'" onfocus="if (this.value==\''.$value.'\') this.value = \'\' "/>'; 
    } 
    else { 
    echo '<label for="'. $name .'">'. $lable .'</label><input type="'.$type.'" name="'. $name .'" id="'. $name .'" />'; 
    } 
} 

Bo jeśli isset ($ value) zwraca false, to wiesz na pewno, że to nie jest ustawiony, ponieważ może zwrócić tylko jedną z dwóch wartości, prawdziwe lub fałszywe.

EDYCJA: Zignoruj ​​tę odpowiedź. Nie było jasne, jakie było pytanie przed edycją.

3

Patrząc na źródło tej stronie wyświetlane są następujące

<form id="search" action="/search" method="get"> 
    <div> 
    <input name="q" class="textbox" tabindex="1" 
    onfocus="if (this.value=='search') this.value = ''" 
    type="text" maxlength="80" size="28" value="search"> 
    </div> 
+0

tak, ale to nie wróci: | kiedy robię to ponownie .. –

+1

Przyjąłeś odpowiedź. Dlaczego wciąż się nad tym zastanawiasz? To jest dokładny kod, którego używa SO. Będzie zachowywać się dokładnie tak, jak widzisz na tej stronie. – Mike

2

Albo jeśli chcesz to zmienić z powrotem do ustawień bez względu na to, jaki tekst jest wpisany ...

<input ... 
onfocus="if (this.value==this.defaultValue) this.value = ''" 
onblur="if (this.value!=this.defaultValue) this.value = this.defaultValue" /> 
+0

Dlaczego, na Boga, chciałbyś to zrobić? Możesz równie dobrze zrobić to tylko do odczytu – mplungjan

+0

Może wolisz chcesz: '' W ten sposób otrzymasz tekst z powrotem, jeśli żaden tekst nie został wprowadzony, gdy 'input' straci fokus. – mickey

0

Spróbuj tego. Może to może pomóc:

<form action="/search" method="get"> 
<input type="text" name="q" value="Search..." onfocus="if (this.value == 'Search...') (this.value='')" onblur="if (this.value == '') (this.value='Search...')" />