Установите значение по умолчанию для поля поиска - пожалуйста, помогите! - PullRequest
0 голосов
/ 23 июня 2009

Я пытаюсь установить значение по умолчанию для поля поиска. Идея заключается в том, что поле поиска будет иметь значение «Поиск», пока пользователь не нажмет на него, тогда оно должно быть пустым. Кроме того, пока оно «пустое» (со значением «Поиск»), оно должно иметь класс «.blank».

Я пробовал это

<input autocomplete="off" class="" id="searchq" name="searchq" onblur="if (this.value == '') { this.value='Search'; jQuery(this).addClass('blank'); };" onfocus="if (this.value == 'Search') { this.value=''; jQuery(this).removeClass('blank'); };" type="text" value="" />

пока работает, но когда я загружаю сайт, поле просто пустое. Мне нужно сначала щелкнуть внутри поля, а затем где-нибудь на странице, чтобы эффект работал.

Я думаю, это как-то связано с onBlur. Есть идеи?

Спасибо!

Ответы [ 7 ]

4 голосов
/ 23 июня 2009

Это известно как водяной знак. см. http://digitalbush.com/projects/watermark-input-plugin/ для примера

3 голосов
/ 31 октября 2012

Другая идея заключается в размещении заполнителей в ваших типах ввода: (Обратите внимание, что это HTML5.)

<input type=text placeholder="Default text here"/>

таким образом текстовое поле будет отображаться серым цветом текста: текст по умолчанию здесь. После нажатия он удалит текст и заменит его текущим текстом, а когда он станет пустым, он вернется.

2 голосов
/ 23 июня 2009

Звучит так, как будто вам просто нужно установить начальное значение на Search, прямо во входном теге, например так:

<input autocomplete="off" class="blank" id="searchq" name="searchq" onblur="if (this.value == '') { this.value='Search'; jQuery(this).addClass('blank'); };" onfocus="if (this.value == 'Search') { this.value=''; jQuery(this).removeClass('blank'); };" type="text" value="Search" />

Обратите внимание, что мы также устанавливаем начальный класс на blank.

2 голосов
/ 23 июня 2009

Просто задайте ему значение по умолчанию «Поиск», как в

<input ... type="text" value="Search" />
1 голос
/ 23 июня 2009

Я обнаружил проблему, моя ошибка: вызывается onBlur, когда пользователь щелкает где-то еще. onLoad разрешен только для тегов BODY и FRAMESET. Решение состоит в том, чтобы установить значение по умолчанию где-нибудь на стороне сервера (для меня в application_controller, если поисковый запрос не представлен).

В любом случае, спасибо!

0 голосов
/ 23 июня 2009

Вот фрагмент, который я использую для этого. Там могут быть более простые способы, но это работает. Любой предмет с классом .cleardefault будет очищен при первом наведении мыши. Любой элемент с классом .setcleardefault удалит значение по умолчанию и, если пользователь ничего не поместил в поле, при наведении мыши сбросит его до значения по умолчанию.

function ClearDefault(item) {
    // clear the default value of a form element
    if (item.defaultValue == undefined)
        item.defaultValue = item.value;
    if (item.defaultValue == item.value)
        item.value = '';
} // ClearDefault

function SetDefault(item) {
    // if item is empty, restore the default value
    if (item.value == '')
        item.value = item.defaultValue;
} // SetDefault

$(document).ready(function() {
    $(".cleardefault")
        .mouseover(function(){
            ClearDefault(this);
        })
    $(".setcleardefault")
        .mouseover(function(){
            ClearDefault(this);
        })
        .mouseout(function(){
            SetDefault(this);
        });
    /*
    */
});
0 голосов
/ 23 июня 2009

размытие - это когда поле теряет фокус, оно не может потерять фокус до тех пор, пока не получит фокус, поэтому вам нужно щелкнуть поле, затем щелкнуть, чтобы увидеть, как оно работает. Вы пытались установить класс .blank по умолчанию?

<input autocomplete="off" class="blank" ....
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...