js兼容的placeholder属性详解


Posted in Javascript onAugust 18, 2013

作为一个.net后台开发的程序猿,博客里既然大多都是前端相关的博文。是不是该考虑换方向了,转前端开发得了 ...

小小吐槽一下,近期受该不该跳槽所困惑,我有选择困难症!

继续前端,这次说一下输入框 placeholder 这个属性。

html5 的新属性,就是在输入框没输入值的时候,显示的提示文字(自己的理解),例如:

js兼容的placeholder属性详解

貌似很好用,但也只能在支持 html 的浏览器版本中显示,而对于不能支持的浏览器版本,让我这种极力追求完美的开发者来说是很不舒服的一件事。

上网找了很多资料,有很多大牛人都已经有了解决方案了,不过或多或少都有些缺陷,这里我做一个整合和修改:

(忘记看了多少别人的代码了,也忘了地址是什么,在此对其他原作者说声抱歉,若有版权问题请联系我! -.-)

这种扩展,在我看来就像是对浏览器界面功能做一次美容,而我始终坚持,自然的才是最美的。所以在支持这种属性的浏览器版本中,我就不多手再去做其他的修改了。

首先判断是否已支持该属性:

if (!('placeholder' in document.createElement('input'))) { }

如果不支持,工作来了。

取出所有拥有 placeholder 属性的 input:text / input:password / textarea,取出各自的 placeholder 属性值,然后模仿功能,在每一个标签后加一个 label 标签,用来显示 placeholder 的值,当输入值时,清空显示的字符串,当删除输入值时,显示字符串。

var $element = $(this), placeholder = $element.attr('placeholder');
if (placeholder) {
    // 文本框ID
    var elementId = $element.attr('id');
    if (!elementId) {
        var now = new Date();
        elementId = 'lbl_placeholder' + now.getSeconds() + now.getMilliseconds();
        $element.attr('id', elementId);
    }
    // 添加label标签,用于显示placeholder的值
    var $label = $('<label>', {
        html: $element.val() ? '' : placeholder,
        'for': elementId,
        css:
            {
                position: 'absolute',
                cursor: 'text',
                color: '#a9a9a9',
                fontSize: $element.css('fontSize'),
                fontFamily: $element.css('fontFamily')
            }
    }).insertAfter($element);
    // 绑定事件
    var _setPosition = function () {
        $label.css({ marginTop: GetStringNumValue($element.css('marginTop')) + 8 + 'px', marginLeft: '-' + (GetStringNumValue($element.css('width')) - 6) + 'px' });
    }
    var _resetPlaceholder = function () {
        if ($element.val()) { $label.html(null); }
        else {
            _setPosition();
            $label.html(placeholder);
        }
    }
    _setPosition();
    $element.on('focus blur input keyup propertychange resetplaceholder', _resetPlaceholder);

代码很简单,需注意的是:

1、label 的 margin-top / margin-left,因为我们的项目用了 bootstrap 框架,已设定了输入框的内间距为 "padding: 4px 6px;" 所以这里需缩进对应的像素值。

2、GetStringNumValue() 是我们自己定义的方法,使用正则表达式,用于把字符串中的数字提取,例如 "123px" 返回 123。

3、对于 IE 中不支持的版本,propertychange 真是一个好方法,完美的结合了!...

4、扩展方法 resetplaceholder,用于使用 js 改变输入框值时(赋值、清空),对 placeholder 进行值的对应设置。

效果:

——IE8

js兼容的placeholder属性详解

——IE9

js兼容的placeholder属性详解

Javascript 相关文章推荐
JAVASCRIPT下判断IE与FF的比较简单的方式
Oct 17 Javascript
js实现简单div拖拽功能实例
May 12 Javascript
jquery无限级联下拉菜单简单实例演示
Nov 23 Javascript
jQuery增加和删除表格项目及实现表格项目排序的方法
May 30 Javascript
canvas实现图片根据滑块放大缩小效果
Feb 24 Javascript
详解Angular 4.x NgIf 的用法
May 22 Javascript
JS判断字符串是否为整数的方法--简单的正则判断
Jul 23 Javascript
JQuery Ajax执行跨域请求数据的解决方案
Dec 10 jQuery
详解基于webpack&amp;gettext的前端多语言方案
Jan 29 Javascript
Vue通过for循环随机生成不同的颜色或随机数的实例
Nov 09 Javascript
图解JS原型和原型链实现原理
Sep 15 Javascript
使用react-virtualized实现图片动态高度长列表的问题
May 28 Javascript
JQuery分别取得每行最后一列和最后一行的示例代码
Aug 18 #Javascript
jquery验证表单中的单选与多选实例
Aug 18 #Javascript
JS+CSS实现一个气泡提示框
Aug 18 #Javascript
JS中for循序中延迟加载动态效果的具体实现
Aug 18 #Javascript
js实现动态添加、删除行、onkeyup表格求和示例
Aug 18 #Javascript
JS通过相同的name进行表格求和代码
Aug 18 #Javascript
复选框全选与全不选操作实现思路
Aug 18 #Javascript
You might like
最贵的咖啡是怎么产生的,它的风味怎么样?
2021/03/04 新手入门
第七节--类的静态成员
2006/11/16 PHP
PHP 选项及相关信息函数库
2006/12/04 PHP
PHP json_encode中文乱码问题的解决办法
2013/09/09 PHP
CI框架整合smarty步骤详解
2016/05/19 PHP
图文详解PHP环境搭建教程
2016/07/16 PHP
js 定时器setTimeout无法调用局部变量的解决办法
2013/11/28 Javascript
纯js实现遮罩层效果原理分析
2014/05/27 Javascript
无限树Jquery插件zTree的常用功能特性总结
2014/09/11 Javascript
javascript学习笔记(七)Ajax和Http状态码
2014/10/08 Javascript
IScroll5 中文API参数说明和调用方法
2016/05/21 Javascript
Express框架之connect-flash详解
2017/05/31 Javascript
layui的table单击行勾选checkbox功能方法
2018/08/14 Javascript
Angular6 正则表达式允许输入部分中文字符
2018/09/10 Javascript
如何使用proxy实现一个简单完整的MVVM库的示例代码
2019/09/17 Javascript
js+canvas实现刮刮奖功能
2020/09/13 Javascript
wxpython 学习笔记 第一天
2009/03/16 Python
Python运用于数据分析的简单教程
2015/03/27 Python
Python中的lstrip()方法使用简介
2015/05/19 Python
详解python项目实战:模拟登陆CSDN
2019/04/04 Python
python实现银联支付和支付宝支付接入
2019/05/07 Python
解决.ui文件生成的.py文件运行不出现界面的方法
2019/06/19 Python
Python+Pyqt实现简单GUI电子时钟
2021/02/22 Python
Python中使用gflags实例及原理解析
2019/12/13 Python
关于Pytorch的MLP模块实现方式
2020/01/07 Python
新西兰演唱会和体育门票网站:Ticketmaster新西兰
2017/10/07 全球购物
UNOde50美国官网:西班牙珠宝品牌
2020/08/15 全球购物
PHP开发工程师面试问题集锦
2012/11/01 面试题
户外婚礼策划方案
2014/02/08 职场文书
法制宣传日活动总结
2014/04/29 职场文书
公司担保书格式范文
2014/05/12 职场文书
临床医学专业求职信
2014/08/08 职场文书
党员四风自我剖析材料思想汇报
2014/09/13 职场文书
群众路线自我剖析范文
2014/11/04 职场文书
2015年幼儿园德育工作总结
2015/05/25 职场文书
Python使用random模块实现掷骰子游戏的示例代码
2021/04/29 Python