带有描述性文本的文本输入

Posted

技术标签:

【中文标题】带有描述性文本的文本输入【英文标题】:Text Input with descriptive text 【发布时间】:2010-10-11 01:32:20 【问题描述】:

我想知道是否有一种简单的方法使用 javascript(包括我们在网站上使用的 JQuery)将描述性文本放入文本输入中,直到用户单击它来输入他们自己的文本。

例如,我想将“搜索”一词放在文本输入中(最好以比实际输入更浅的颜色),直到用户单击输入,然后它消失并允许他们输入搜索词。

我不想让“Search”这个词成为文本输入的值,因为用户可以搜索“search”这个词有点重要。

我正在考虑绝对定位一个

元素,并在输入上使用单词搜索并在单击它(或输入)时将其隐藏。

你怎么看?这是严重误导吗?

【问题讨论】:

【参考方案1】:

我最近遇到了jQuery Form Example plugin,它可以满足您的需求。该项目的 github 页面是here。使用该插件,您可以显示一个占位符值,该值将在点击时消失:

$('input#search').example('Search');

【讨论】:

不错的发现。这似乎最接近 Jim 正在寻找的东西 - 并且比我的 labels.js 建议更好,因为他可能根本不使用标签。【参考方案2】:

您可以将搜索输入的初始值设置为“搜索”,然后添加一个 onClick 监听器将其移除。

$("input.search-term").one("click", function() $(this).removeAttr("value"); );

它不会影响用户搜索“搜索”的能力。与尝试在输入上设置 <p><label> 元素相比,这是一种更简洁的方法。

编辑:您说的完全正确 - 删除每次点击的价值是糟糕的用户体验。这就是我快速回答的原因。 :) 更新为仅删除初始值。

【讨论】:

删除每次点击时的值与我有关...如果用户输入一点,然后点击退出并想再输入一些怎么办?此外,如果用户没有输入任何内容......我想把帮助文本放回去 @Jim,检查我的解决方案。虽然我没有测试它应该可以工作。 不不!每次点击都执行这个动作是极其短视的,也没有经过深思熟虑。【参考方案3】:

您可能想检查一下: http://www.newmediacampaigns.com/page/nmcformhelper

基本上,html 5 支持输入元素的 placeholder 属性:

<input type="text" placeholder="Your browser supports placeholder text" size=38>

WebKit(Chrome 和 Safari)现在支持这个,但是对于 Firefox 和 IE 等其他浏览器,当浏览器不支持 HTML 5 功能时,您可以使用此脚本模拟使用 Javascript 的效果。

【讨论】:

【参考方案4】:

多年来,一直有一个名为 labels.js 的流行“项目”,最初由 oldpup.net 的 Aaron Boodman 撰写。这个想法仍然存在,甚至存在jQuery version(演示#4)。

【讨论】:

【参考方案5】:

虽然我不想让“Search”这个词成为文本输入的值,因为用户可以搜索“search”这个词有点重要。

在这种情况下,您可以在文本输入上使用背景图像。您可以在 CSS 中定义 :focus 不应该有背景,而 unfocused 应该有它。即使禁用了 javascript,此解决方案也有效。

更新:经过测试,可与 FF、Opera 和 Chrome 一起使用,但不适用于 IE,因为 IE 不支持 :focus,但 IE 支持背景图像,所以如果文本是浅灰色的,应该没有问题。并且您可以随时使用 jquery 来更改输入字段应具有的分类。

【讨论】:

值得一提的是,不同的浏览器/操作系统有不同的字体渲染方法,如果你使用这种技术,你的占位符文本看起来会不一致。【参考方案6】:

不久前我正在寻找这个解决方案,结果遇到了this

/**
* @author Remy Sharp
* @url http://remysharp.com/2007/01/25/jquery-tutorial-text-box-hints/
*/

(function ($) 

$.fn.hint = function (blurClass) 
  if (!blurClass)  
    blurClass = 'blur';
  

  return this.each(function () 
    // get jQuery version of 'this'
    var $input = $(this),

    // capture the rest of the variable to allow for reuse
      title = $input.attr('title'),
      $form = $(this.form),
      $win = $(window);

    function remove() 
      if ($input.val() === title && $input.hasClass(blurClass)) 
        $input.val('').removeClass(blurClass);
      
    

    // only apply logic if the element has the attribute
    if (title)  
      // on blur, set value to title attr if text is blank
      $input.blur(function () 
        if (this.value === '') 
          $input.val(title).addClass(blurClass);
        
      ).focus(remove).blur(); // now change all inputs to title

      // clear the pre-defined text when form is submitted
      $form.submit(remove);
      $win.unload(remove); // handles Firefox's autocomplete
    
  );
;

)(jQuery);


$(function() 
    // find all the input elements with title attributes
    $('input[title!=""]').hint();
);

【讨论】:

我在几个网站上使用过这种方法,但由于某种原因它并不总是有效——我不知道为什么。【参考方案7】:

我会在 jQuery 中做这样的事情:

$("input.searchterm").click(function()  
  var $input = $(this);
  if ($input.val() == "enter search term") $input.val("");
;

这样用户在再次点击时不会丢失他们之前输入的内容。只有当它是您分配给输入字段的默认值时,该值才会被清除。

【讨论】:

【参考方案8】:

作为参考,这种技术通常称为水印

【讨论】:

以上是关于带有描述性文本的文本输入的主要内容,如果未能解决你的问题,请参考以下文章

使用 css 放置带有输入文本的按钮

选择带有输入文本的选项[重复]

表单不会使用 PHP 将带有文件上传的文本输入发布到 SQL 表

带有输入键的文本框行号

在一行中添加带有输入文本的选择框

文本在带有输入字段的居中 div 中左对齐