如何使HTML文本框为空时显示提示?


210

我希望网页上的搜索框以灰色斜体显示单词“搜索”。当框获得焦点时,它应该看起来像一个空的文本框。如果其中已经有文本,则应正常显示文本(黑色,非斜体)。这将帮助我通过除去标签来避免混乱。

顺便说一句,这是页面上的Ajax搜索,因此没有按钮。


4
自从提出问题以来,所有浏览器都支持HTML5占位符属性。
2015年

嗨,迈克尔。您愿意在此页面上更改接受的答案吗?看起来有明显的赢家,这与公认的答案不同。
空值

JavaScript解决方案的问题在于并非所有人都打开了JavaScript。如果使用浏览器插件(例如NoScript),则在文本框获得焦点时,占位符不会消失(对于开发人员而言非常方便)。占位符选项是最可靠的解决方案。
Sablefoste

Answers:


365

如果您很高兴只对较新的浏览器拥有此功能,那么另一个选择是使用HTML 5的placeholder属性提供的支持:

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

在没有任何样式的情况下,Chrome中的外观如下:

enter image description here

您可以在此处以及使用CSS的HTML5占位符样式中进行演示。

请务必检查 此功能浏览器兼容性。3.7中添加了对Firefox的支持。铬很好。Internet Explorer仅在10中添加了支持。如果定位的浏览器不支持输入占位符,则可以使用称为jQuery HTML5 Placeholder的jQuery插件,然后只需添加以下JavaScript代码即可启用它。

$('input[placeholder], textarea[placeholder]').placeholder();

@Duke,它可以在Fx3.7 +,(Safari / Chrome)和Opera中运行。IE9不支持它,所以我想IE8也不支持。
亚历山德罗·韦尔梅伦

是的,我今天才发现FF3.6不支持它。
德鲁·诺阿克斯

我认为它又被移动了。我在这里找到它:github.com/mathiasbynens/jquery-placeholder
jocull

警告开发人员“即使字段为空,Internet Explorer 10和11在字段集中时也不会显示占位符。”
Panic Panic 2015年

92

这就是所谓的文本框水印,它是通过JavaScript完成的。

或者,如果您使用jQuery,则更好的方法是:


4
第二个链接断开。这可能是相似的:digitalbush.com/projects/watermark-input-plugin
Michael Haren

14
找到了另一种jQuery方法。此项目由@ code.google.com/p/jquery-watermark
JP Hellemons,2010年

4
digitalbrush插件会将“水印”保存到数据库中。它处于测试阶段,自2007年以来未进行过更新。我建议按照@JP的建议使用code.google.com/p/jquery-watermark
金博尔·罗宾逊

1
我认为问题的作者应该回过头来,将@JP评论标记为最佳答案。
兰迪L

2
jQuery水印插件是一个不错的菜鸟,因为它不能处理输入与预填充值相同的情况。在这种情况下,它将使您的输入文本再次变灰!
atp

41

您可以使用HTML中的属性设置占位符浏览器支持)。的placeholderfont-stylecolor可以用CSS改变(虽然浏览器的支持是有限的)。

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


一直在寻找这个,等等-进一步的信息diveintohtml5.org/forms.html#placeholder
David Yell 2010年

2
现在,这应该是公认的答案。最初在2010年发布占位符属性时,它可能尚未得到广泛支持,但现在,除IE8之外,当前所有的浏览器均支持占位符属性。
JSP64 2015年

20

您可以使用JavaScript 添加和删​​除特殊的CSS类并修改输入值onfocus/ onblur

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

然后使用您想要的CSS样式指定提示类,例如:

input.hint {
    color: grey;
}

2
我已经张贴做同样的事情,但在一个更方便,维护的方式回答:stackoverflow.com/questions/108207/...
德鲁诺克斯

6

最好的方法是使用jQueryYUI之类的JavaScript库连接JavaScript事件,并将代码放入外部.js文件中。

但是,如果您想要一个快速而又肮脏的解决方案,这是您的内联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'}" />

更新:添加了所需的着色材料。


可以进行搜索,但是在许多情况下,您不希望在任何提交事件中提交水印。
金博尔·罗宾逊

@ k.robinson我对该语句+1了。这是当时最快,最紧凑的代码。可以使用javascript代码块更精细地解决它。
塞伯·尼尔森

4

我前一段时间在我的网站上发布了一个解决方案。要使用它,请导入一个.js文件:

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

然后使用CSS类注释您想要提示的任何输入hintTextbox

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

此处提供更多信息和示例。


1
但是它坏了。如果我输入了与提示相同的文本,则它的行为就像没有输入任何内容(如果我再次
跳进

2
@Stephan:是的,这是我所知道的唯一警告。您是否真的发现这实际上是一个问题?如果是这样,那么您可能需要研究在上面的div分层并显示/隐藏它。这是我所知道的最简单的解决方案。如果禁用JavaScript,我的性能也会下降。
德鲁·诺阿克斯

设置值触发了我。当文本框为空时,我需要预先填充现有值或默认值以及提示的综合需求
Stephan Eggermont,2010年

@Stephan-今天我实际上遇到了对此的需求,并且正在寻找jQuery插件。被接受的答案中的链接遭受与我相同的问题。您知道替代品吗?
德鲁·诺阿克斯

3

这是一个带有Google Ajax库缓存和jQuery魔术的功能示例。

这将是CSS:

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

这将是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>

这将是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>

我希望这足以使您对GAJAXLib和jQuery都感兴趣。



2

对于jQuery用户:naspinski的jQuery链接似乎已损坏,但请尝试以下操作:http ://remysharp.com/2007/01/25/jquery-tutorial-text-box-hints/

您可以获得免费的jQuery插件教程作为奖励。:)


我在tripfootprint.com上使用了Remy的插件,效果很好。我喜欢它很简单,可以继续学习和学习。
Anirvan

2

我发现jQuery插件jQuery Watermark优于顶部答案中列出的插件。为什么更好?因为它支持密码输入字段。同样,设置水印的颜色(或其他属性)就像.watermark在CSS文件中创建引用一样容易。


2

这称为“水印”。

我发现了jQuery插件jQuery水印,它与第一个答案不同,不需要额外的设置(原始答案在提交表单之前也需要进行特殊调用)。


2

使用jQuery表单通知程序它是最流行的jQuery插件之一,并且不会受到此处其他jQuery建议所做的错误的影响(例如,您可以自由设置水印的样式,而不必担心它是否会保存到数据库)。

jQuery Watermark直接在表单元素上使用单个CSS样式(我注意到,应用于水印的CSS字体大小属性也影响了文本框-不是我想要的)。jQuery Watermark的优点是您可以将文本拖放到字段中(jQuery Form Notifier不允许这样做)。

其他人建议的另一个(在digitalbrush.com上的建议)会不小心将水印值提交到您的表单中,因此我强烈建议您反对。


1

使用背景图像渲染文本:

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

然后,您要做的就是检测value == 0并应用正确的类:

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

jQuery JavaScript代码如下所示:

jQuery(function($)
{
    var target = $("input.foo");
    target.bind("change", function()
    {
        if( target.val().length > 1 )
        {
            target.addClass("fooempty");
        }
        else
        {
            target.removeClass("fooempty");
        }
    });
});

1

您可以轻松地将一个框显示为“搜索”,然后将焦点更改为它时,将文本删除。像这样:

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

当然,如果您这样做,则用户自己的文本在单击时会消失。因此,您可能想使用更强大的功能:

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

0

首次加载页面时,将在文本框中显示“搜索”,如果需要,将其显示为灰色。

当输入框获得焦点时,选择搜索框中的所有文本,以便用户可以开始输入,这将在此过程中删除所选的文本。如果用户想再次使用搜索框,这也将很好地工作,因为他们不必手动突出显示以前的文本即可将其删除。

<input type="text" value="Search" onfocus="this.select();" />

0

我喜欢“知识Chikuse”的解决方案-简单明了。仅需在页面加载准备就绪时添加调用以模糊处理即可设置初始状态:

$('input[value="text"]').blur();

0

您想为onfocus分配这样的内容:

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

和这个模糊:

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

(如果需要,您可以使用一些更聪明的东西(例如框架函数)来进行类名切换。)

使用这样的CSS:

input.placeholder{
    color: gray;
    font-style: italic;
}

0

我正在使用一个简单的单行javascript解决方案,效果很好。这是文本框和文本区域的示例:

    <textarea onfocus="if (this.value == 'Text') { this.value = ''; }" onblur="if (this.value == '') { this.value = 'Text'; }">Text</textarea>

    <input type="text" value="Text" onfocus="if (this.value == 'Text') { this.value = ''; }" onblur="if (this.value == '') { this.value = 'Text'; }">

在对字段值进行任何操作之前,只有“缺点”是在$ _POST或Javascript验证中进行验证。意思是,检查字段的值不是“文本”。


-1
$('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

简单的HTML'required'标签很有用。

<form>
<input type="text" name="test" id="test" required>
<input type="submit" value="enter">
</form>

它指定在提交表单或按提交按钮之前必须填写输入字段。 这是例子


尽管它很有用,但与问题无关。
昆汀

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.