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 相关文章推荐
JQuery中each()的使用方法说明
Aug 19 Javascript
JQERY limittext 插件0.2版(长内容限制显示)
Aug 27 Javascript
Javascript 垃圾收集机制介绍理解
May 14 Javascript
javaScript array(数组)使用字符串作为数组下标的方法
Nov 19 Javascript
JS中Date日期函数中的参数使用介绍
Jan 02 Javascript
js判断输入字符串是否为空、空格、null的方法总结
Jun 14 Javascript
AngularJS API之copy深拷贝详解及实例
Sep 14 Javascript
jQuery获取选中单选按钮radio的值
Dec 27 Javascript
基于jQuery实现无缝轮播与左右点击效果
May 13 jQuery
JS实现图片转换成base64的各种应用场景实例分析
Jun 22 Javascript
vue 项目打包时样式及背景图片路径找不到的解决方式
Nov 12 Javascript
JavaScript实现酷炫的鼠标拖尾特效
Feb 18 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
php获取301跳转URL简单实例
2013/12/16 PHP
[原创]php token使用与验证示例【测试可用】
2017/08/30 PHP
jQuery LigerUI 使用教程表格篇(1)
2012/01/18 Javascript
基于JavaScript判断浏览器到底是关闭还是刷新(超准确)
2016/02/01 Javascript
Bootstrap每天必学之折叠(Collapse)插件
2016/04/25 Javascript
jquery自定义插件——window的实现【示例代码】
2016/05/06 Javascript
JavaScript中ES6字符串扩展方法
2016/08/26 Javascript
JavaScript中Array的实用操作技巧分享
2016/09/11 Javascript
JavaScript评论点赞功能的实现方法
2017/03/13 Javascript
jQuery 实现鼠标画框并对框内数据选中的实例代码
2017/08/29 jQuery
JS写XSS cookie stealer来窃取密码的步骤详解
2017/11/20 Javascript
解决element-ui中下拉菜单子选项click事件不触发的问题
2018/08/22 Javascript
Node.js 如何利用异步提升任务处理速度
2019/01/07 Javascript
jQuery内容选择器与表单选择器实例分析
2019/06/28 jQuery
JS call()及apply()方法使用实例汇总
2020/07/11 Javascript
Python采用socket模拟TCP通讯的实现方法
2014/11/19 Python
python logging类库使用例子
2014/11/22 Python
Python装饰器使用示例及实际应用例子
2015/03/06 Python
Python中取整的几种方法小结
2017/01/06 Python
Python使用folium excel绘制point
2019/01/03 Python
python如何统计代码运行的时长
2019/07/24 Python
Django 响应数据response的返回源码详解
2019/08/06 Python
pytorch 自定义数据集加载方法
2019/08/18 Python
Spring http服务远程调用实现过程解析
2020/06/11 Python
Html5监听手机摇一摇事件的实现
2019/11/07 HTML / CSS
MAC Cosmetics官方网站:魅可专业艺术彩妆
2019/04/10 全球购物
Cynthia Rowley官网:全球领先的生活方式品牌
2020/10/27 全球购物
配置管理计划的主要内容有哪些
2014/06/20 面试题
自荐信要包含哪些内容
2013/11/06 职场文书
大学生蛋糕店创业计划书
2014/01/13 职场文书
经典婚礼主持词
2014/03/13 职场文书
网吧员工管理制度
2015/08/05 职场文书
小学英语教学随笔
2015/08/14 职场文书
远程教育培训心得体会
2016/01/09 职场文书
Spring Data JPA的Audit功能审计数据库的变更
2021/06/26 Java/Android
python 多态 协议 鸭子类型详解
2021/11/27 Python