Вход в HTML onfocus & onblur?

ok, сегодня я создаю вспомогательную HTML-функцию. Это выглядит так:

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

Как вы можете видеть, если вы вставляете значение, он будет делать некоторый JavaScript, чтобы при щелчке по нему текст внутри поля исчезнет, ​​

Вопрос: Как мы можем заставить его иметь значение, когда мы не на входе? (посмотрите в окне поиска в stackoverflow, однако тот, который находится на stackoverflow, не возвращается после того, как мы не укажем на поле ввода? Возможно, используя onblur? Я прав?

Надеюсь, вы поймете, что я имею в виду.

ok, потому что некоторые из вас не понимают, что я имею в виду см.

когда im не нажимает на него.

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

когда я нажимаю на него.

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

когда im не нажмете его снова.

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

он должен быть

когда im не нажимает на него.

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

когда я нажимаю на него.

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

когда im не нажмете его снова.

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

Ответ 1

Вы хотите это

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

Обновление. Некоторые новые браузеры будут делать то, что вы хотите, просто добавив атрибут placeholder:

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

Вот PHP в соответствии с вашим кодом

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;

Ответ 2

Если я правильно понимаю, SO использует эту строку HTML для выполнения этого эффекта.

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

Не связано с вашим вопросом, но вы можете и должны заменить свой второй оператор if выражением else.

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

Потому что если isset ($ value) возвращает false, то вы знаете, что он не установлен, поскольку он может возвращать только одно из двух значений: true или false.

EDIT: проигнорируйте этот ответ. Было непонятно, какой вопрос был перед редактированием.

Ответ 3

Глядя на источник этой страницы, вы увидите следующее

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

Ответ 4

Или это, если вы хотите, чтобы он изменил значение по умолчанию независимо от того, какой текст был введен...

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

Ответ 5

Попробуйте это. Может быть, это может вам помочь:

<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...')" />