0

0

实现placeholder效果的方案汇总_jquery

php中文网

php中文网

发布时间:2016-05-16 15:55:45

|

1925人浏览过

|

来源于php中文网

原创

placeholder是html5的一个属性,它提供可描述输入字段预期值的提示信息(hint), 该提示会在输入字段为空时显示。高端浏览器支持此属性(ie10/11在获得焦点时文字消失),ie6/7/8/9则不支持。为了兼容各主流浏览器并使其呈现效果保持一致,以下三套方案仅供参考。

方案一:

摒弃原始属性placeholder,为input添加一个兄弟节点span,并为span设置绝对定位(父节点为position: relative;),使其位于input之上。html代码片段如下:

  • 手机号码/邮箱地址
  • 请输入密码
  • js代码如下(简单写了个函数,没写插件形式,呵呵):

    function _placeholderText(phInput, phText) { //定义函数,传递2个参数——input输入框和text提示文本的id或者class
      var $input = $(phInput);
      var $text = $(phText);
      $input.each(function() { //页面加载时遍历所有仿placeholder的input
        var _this = $(this);
        var _text = _this.siblings(phText);
        if($.trim(_this.val()) == '') {
          _this.val("");
          _text.show();
        } else {
          _text.hide();
        }
      });
      $text.on('click', function() { //点击提示信息,input获取焦点
        $(this).siblings(phInput).focus();
      });
      $input.on('input propertychange blur', function() { //为input注册事件,value值改变(其实是属性发生变化)时以及失去焦点时判断value值是否为空
        var _this = $(this);
        if(_this.val() == '') {
          _this.siblings(phText).show();
        } else {
          _this.siblings(phText).hide();
        }
      });
    }
    
    _placeholderText('.phInput', '.phText'); //调用函数
    
    

    个人总结:方案一适用于登录页面,但对于后台form表单及前台的搜索页面不太适合,因为要增加新的提示文本标签,不太友好。

    方案二:

    同样摒弃原始属性placeholder,为添加一个属性phText="手机号码/邮箱地址"。默认状态下,value值为提示文本并且颜色为灰色;获得焦点时,若value值等于phText属性值,则value值置空;失去焦点时,若value值为空,则value值为提示文本。js代码如下:

    function inputJsDIY(obj, colorTip, colorTxt) { //定义函数,传递3个参数——DOM对象、提示文本的颜色值、输入文本的颜色值
      colorTip = colorTip || '#aaaaaa';
      colorTxt = colorTxt || '#666666';
      obj.each(function() {
        var _this = $(this);
        _this.css({"color": colorTip}); //输入框颜色默认置为提示文本的颜色值
        if($.trim(_this.val()) == "") { //判断value值是否为空,若为空则value值赋值等于提示文本
          _this.val(_this.attr("phText"));
        } else if(_this.val() != _this.attr("phText")) {
          _this.css({"color": colorTxt}); //正常的输入文本颜色值
        }
      });
      obj.on("focus", function() { //获取焦点时做判断
        var _this = $(this);
        var value = _this.val();
        if(value == _this.attr("phText")) {
          _this.val("");
        }
        _this.css({"color": colorTxt});
      });
      obj.on("blur", function() { //失去焦点时做判断
        var _this = $(this);
        var value = _this.val();
        if($.trim(value) == "") {
          _this.val($(this).attr("phText")).css({"color": colorTip});
        }
      });
      obj.parents("form").on("submit", function() { //提交表单时去除提示文本(把提示文本置空)
        obj.each(function() {
          var _this = $(this);
          if(_this.val() == _this.attr("phText")) {
            _this.val("");
          }
        });
      });
    }
    
    inputJsDIY($('.phInput'), '#aaa', '#666'); //调用函数
    
    

    个人总结:方案二比较适合后台页面form表单及前台搜索页面,操作简单,无附加标签。缺点是不能用于password类型的,而且获得焦点时的提示文本消失(value值等于phText属性值时),这一点与原始的placeholder属性不同。

    带数字的图文tab切换特效
    带数字的图文tab切换特效

    jQuery基于owlCarousel插件实现解决方案图文布局,自定义数字索引控制tab切换效果。这是一款黑色的图文案例展示布局代码。

    下载

    另外,也可以把phText属性改为placeholder属性,支持的浏览器呈现原始效果,不支持的浏览器通过js判断{'placeholder' in document.createElement('input')}调用方案二中的函数。此折中方案也有其缺点,各浏览器呈现的效果不完全一样。

    方案三:

    为不支持placeholder的浏览器写一个方法,首先把placeholder值赋给并且颜色置为灰色,然后获得焦点时判断value值等于placeholder值的话,把光标移至最前面(this.createTextRange和this.setSelectionRange)。当发生输入操作时,先把value值置为空,然后再接收输入值。另外,对于要为其新增一个用来显示提示文本,当发生输入操作时,需要把隐藏,然后把显示出来并让其获得焦点。此方案也有一些小缺陷,那就是当用鼠标右键粘贴时会出现bug。

    总体上来讲,几种方案各有优缺点。登录页面我更倾向于使用方案一,呈现效果完全一致,仅仅是增加个新标签也不算麻烦。后台form表单和前台搜索页面更倾向于方案二,简单有效,只是在获得焦点时提示文本消失。

    以上所述就是本文的全部内容了,希望大家能够喜欢。

    相关专题

    更多
    PHP 表单处理与文件上传安全实战
    PHP 表单处理与文件上传安全实战

    本专题聚焦 PHP 在表单处理与文件上传场景中的实战与安全问题,系统讲解表单数据获取与校验、XSS 与 CSRF 防护、文件类型与大小限制、上传目录安全配置、恶意文件识别以及常见安全漏洞的防范策略。通过贴近真实业务的案例,帮助学习者掌握 安全、规范地处理用户输入与文件上传的完整开发流程。

    3

    2026.01.13

    PPT交互图表教程大全
    PPT交互图表教程大全

    本专题整合了PPT交互图表相关教程汇总,阅读专题下面的文章了解更多详细内容。

    47

    2026.01.12

    Java 项目构建与依赖管理(Maven / Gradle)
    Java 项目构建与依赖管理(Maven / Gradle)

    本专题系统讲解 Java 项目构建与依赖管理的完整体系,重点覆盖 Maven 与 Gradle 的核心概念、项目生命周期、依赖冲突解决、多模块项目管理、构建加速与版本发布规范。通过真实项目结构示例,帮助学习者掌握 从零搭建、维护到发布 Java 工程的标准化流程,提升在实际团队开发中的工程能力与协作效率。

    19

    2026.01.12

    c++主流开发框架汇总
    c++主流开发框架汇总

    本专题整合了c++开发框架推荐,阅读专题下面的文章了解更多详细内容。

    135

    2026.01.09

    c++框架学习教程汇总
    c++框架学习教程汇总

    本专题整合了c++框架学习教程汇总,阅读专题下面的文章了解更多详细内容。

    66

    2026.01.09

    学python好用的网站推荐
    学python好用的网站推荐

    本专题整合了python学习教程汇总,阅读专题下面的文章了解更多详细内容。

    140

    2026.01.09

    学python网站汇总
    学python网站汇总

    本专题整合了学python网站汇总,阅读专题下面的文章了解更多详细内容。

    13

    2026.01.09

    python学习网站
    python学习网站

    本专题整合了python学习相关推荐汇总,阅读专题下面的文章了解更多详细内容。

    19

    2026.01.09

    俄罗斯手机浏览器地址汇总
    俄罗斯手机浏览器地址汇总

    汇总俄罗斯Yandex手机浏览器官方网址入口,涵盖国际版与俄语版,适配移动端访问,一键直达搜索、地图、新闻等核心服务。

    105

    2026.01.09

    热门下载

    更多
    网站特效
    /
    网站源码
    /
    网站素材
    /
    前端模板

    精品课程

    更多
    相关推荐
    /
    热门推荐
    /
    最新课程
    关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
    php中文网:公益在线php培训,帮助PHP学习者快速成长!
    关注服务号 技术交流群
    PHP中文网订阅号
    每天精选资源文章推送

    Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号