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 相关文章推荐
用JS实现的一个include函数
Jul 21 Javascript
jquery选择符快速提取web表单数据示例
Mar 27 Javascript
javascript实现淡蓝色的鼠标拖动选择框实例
May 09 Javascript
文本框只能输入数字的js代码(含小数点)
Jul 10 Javascript
AngularJS ng-controller 指令简单实例
Aug 01 Javascript
利用Vue.js+Node.js+MongoDB实现一个博客系统(附源码)
Apr 24 Javascript
JS获取填报扩展单元格控件的值的解决办法
Jul 14 Javascript
JS使用tofixed与round处理数据四舍五入的区别
Oct 25 Javascript
jQuery图片查看插件Magnify开发详解
Dec 25 jQuery
vuex页面刷新后数据丢失的方法
Jan 17 Javascript
vue2路由基本用法实例分析
Mar 06 Javascript
vue 使用微信jssdk,调用微信相册上传图片功能
Nov 13 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新手上路(二)
2006/10/09 PHP
php与XML、XSLT、Mysql的结合运用实现代码
2009/11/19 PHP
PHP字符串的编码问题的详细介绍
2013/04/27 PHP
apache配置虚拟主机的方法详解
2013/06/17 PHP
深入解析PHP的Laravel框架中的event事件操作
2016/03/21 PHP
利用Dojo和JSON建立无限级AJAX动态加载的功能模块树
2007/03/24 Javascript
jQuery实现tag便签去重效果的方法
2015/01/20 Javascript
JavaScript通过setTimeout实时显示当前时间的方法
2015/04/16 Javascript
JS添加或修改控件的样式(Class)实现方法
2016/10/15 Javascript
深入浅析Vue.js中 computed和methods不同机制
2018/03/22 Javascript
js键盘事件实现人物的行走
2020/01/17 Javascript
[01:15:29]DOTA2上海特级锦标赛主赛事日 - 3 胜者组第二轮#2Secret VS EG第三局
2016/03/04 DOTA
让python的Cookie.py模块支持冒号做key的方法
2010/12/28 Python
Python 3中的yield from语法详解
2017/01/18 Python
使用 Python 实现微信公众号粉丝迁移流程
2018/01/03 Python
python re模块findall()函数实例解析
2018/01/19 Python
Python之pymysql的使用小结
2019/07/01 Python
python实现对列表中的元素进行倒序打印
2019/11/23 Python
sklearn的predict_proba使用说明
2020/06/28 Python
python 使用tkinter+you-get实现视频下载器
2020/11/17 Python
如何用 Python 制作一个迷宫游戏
2021/02/25 Python
西海岸男士和男童服装:Johnnie-O
2018/03/15 全球购物
美国购买汽车零件网站:Buy Auto Parts
2018/04/02 全球购物
个人求职简历的自我评价范文
2013/10/09 职场文书
入党自荐书范文
2014/03/09 职场文书
乡村卫生服务一体化管理实施方案
2014/03/30 职场文书
班主任对学生的评语
2014/04/26 职场文书
群众路线教育党员自我剖析材料
2014/10/06 职场文书
商务考察邀请函模板
2015/02/02 职场文书
创先争优活动个人总结
2015/03/04 职场文书
2015年七夕情人节活动方案
2015/05/06 职场文书
新郎父母婚礼致辞
2015/07/27 职场文书
2016年幼儿园教师师德承诺书
2016/03/25 职场文书
话题作文之自信作文
2019/11/15 职场文书
Vue + iView实现Excel上传功能的完整代码
2021/06/22 Vue.js
使用CSS实现百叶窗效果示例代码
2023/05/07 HTML / CSS