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 相关文章推荐
Dom在ajax技术中的作用说明
Oct 25 Javascript
如何使用jquery动态加载js,css文件实现代码
Apr 03 Javascript
javascript的渐进增强与平稳退化浅谈
Nov 12 Javascript
JS延时提示框实现方法详解
Nov 26 Javascript
使用ionic切换页面卡顿的解决方法
Dec 16 Javascript
修改ligerui 默认确认按钮的方法
Dec 27 Javascript
Bootstrap栅格系统使用方法及页面调整变形的解决方法
Mar 10 Javascript
微信小程序开发之toast提示插件使用示例
Jun 08 Javascript
zTree树形插件异步加载方法详解
Jun 14 Javascript
JavaScript+H5实现微信摇一摇功能
May 23 Javascript
JS中min函数实例讲解
Feb 18 Javascript
Vue.js 无限滚动列表性能优化方案
Dec 02 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实现上传图片文件代码
2015/07/19 PHP
PHP在线书签系统分享
2016/01/04 PHP
PHP实现文件上传与下载实例与总结
2016/03/13 PHP
ThinkPHP 整合Bootstrap Ajax分页样式
2016/12/23 PHP
thinkphp5框架前后端分离项目实现分页功能的方法分析
2019/10/08 PHP
javascript常用方法总结
2015/05/14 Javascript
分享jQuery插件的学习笔记
2016/01/14 Javascript
JavaScript ES5标准中新增的Array方法
2016/06/28 Javascript
原生JS实现网络彩票投注效果
2016/09/25 Javascript
Bootstrap CSS布局之代码
2016/12/17 Javascript
JavaScript中使用webuploader实现上传视频功能(demo)
2017/04/10 Javascript
vue中axios的封装问题(简易版拦截,get,post)
2018/06/15 Javascript
angular1.x ui-route传参的三种写法小结
2018/08/31 Javascript
小程序自动化测试的示例代码
2020/08/11 Javascript
javascript操作向表格中动态加载数据
2020/08/27 Javascript
详解Python函数作用域的LEGB顺序
2016/05/14 Python
python获取当前用户的主目录路径方法(推荐)
2017/01/12 Python
python TF-IDF算法实现文本关键词提取
2019/05/29 Python
在Python中表示一个对象的方法
2019/06/25 Python
Pandas的read_csv函数参数分析详解
2019/07/02 Python
Python+Redis实现布隆过滤器
2019/12/08 Python
简述python Scrapy框架
2020/08/17 Python
CSS3 media queries + jQuery实现响应式导航
2016/09/30 HTML / CSS
浅谈CSS3 动画卡顿解决方案
2019/01/02 HTML / CSS
新西兰演唱会和体育门票网站:Ticketmaster新西兰
2017/10/07 全球购物
Boutique 1美国:阿联酋奢侈时尚零售商
2017/10/16 全球购物
校园餐饮创业计划书
2014/01/10 职场文书
房屋公证委托书
2014/04/03 职场文书
乡镇民主生活会发言材料
2014/10/20 职场文书
营销与策划实训报告
2014/11/05 职场文书
会计工作检讨书
2015/02/19 职场文书
2016年小学推普宣传周活动总结
2016/04/06 职场文书
浅谈Java实现分布式事务的三种方案
2021/06/11 Java/Android
教你如何让spark sql写mysql的时候支持update操作
2022/02/15 MySQL
vue代码分块和懒加载非必要资源文件
2022/04/11 Vue.js