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生成asp.net服务器控件的代码
Feb 04 Javascript
jcarousellite.js 基于Jquery的图片无缝滚动插件
Dec 30 Javascript
JQuery的$和其它JS发生冲突的快速解决方法
Jan 24 Javascript
微信小程序 地图map详解及简单实例
Jan 10 Javascript
vue2 如何实现div contenteditable=“true”(类似于v-model)的效果
Feb 08 Javascript
JS简单判断函数是否存在的方法
Feb 13 Javascript
vuex 的简单使用
Mar 22 Javascript
vue select选择框数据变化监听方法
Aug 24 Javascript
jQuery选择器之层次选择器用法实例分析
Feb 19 jQuery
vue集成kindeditor富文本的实现示例代码
Jun 07 Javascript
js实现轮播图效果 z-index实现轮播图
Jan 17 Javascript
js重写alert事件(避免alert弹框标题出现网址)
Dec 04 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
让codeigniter与swfupload整合的最佳解决方案
2014/06/12 PHP
PHP转换文本框内容为HTML格式的方法
2016/07/20 PHP
thinkPHP实现的省市区三级联动功能示例
2017/05/05 PHP
Yii框架通过请求组件处理get,post请求的方法分析
2019/09/03 PHP
PHP标准库 (SPL)――Countable用法示例
2020/06/05 PHP
重载toString实现JS HashMap分析
2011/03/13 Javascript
ExtJs Excel导出并下载IIS服务器端遇到的问题
2011/09/16 Javascript
javascript是怎么继承的介绍
2012/01/05 Javascript
jquery动画3.创建一个带遮罩效果的图片走廊
2012/08/24 Javascript
JS将表单导出成EXCEL的实例代码
2013/11/11 Javascript
纯js实现div内图片自适应大小(已测试,兼容火狐)
2014/06/16 Javascript
使用jsonp完美解决跨域问题
2014/11/27 Javascript
jQuery制作拼图小游戏
2015/01/12 Javascript
javascript常用功能汇总
2015/07/05 Javascript
关于原生js中bind函数的简单实现
2016/08/10 Javascript
AngularJS入门教程之AngularJS 模板
2016/08/18 Javascript
设置cookie指定时间失效(实例代码)
2017/05/28 Javascript
原生js实现贪食蛇小游戏的思路详解
2019/11/26 Javascript
Vue toFixed保留两位小数的3种方式
2020/10/23 Javascript
[05:31]DOTA2上海特级锦标赛主赛事第三日RECAP
2016/03/05 DOTA
Python多层嵌套list的递归处理方法(推荐)
2016/06/08 Python
Django自定义过滤器定义与用法示例
2018/03/22 Python
python单例模式获取IP代理的方法详解
2018/09/13 Python
Opencv+Python实现图像运动模糊和高斯模糊的示例
2019/04/11 Python
Python实现时间序列可视化的方法
2019/08/06 Python
python urllib爬虫模块使用解析
2019/09/05 Python
pytorch 利用lstm做mnist手写数字识别分类的实例
2020/01/10 Python
爬虫代理的cookie如何生成运行
2020/09/22 Python
基于python实现监听Rabbitmq系统日志代码示例
2020/11/28 Python
奢华时尚的创新平台:Baltini
2020/10/03 全球购物
体育专业学生自我评价范文
2014/01/17 职场文书
校园活动宣传方案
2014/03/28 职场文书
群众路线剖析材料(四风)
2014/11/05 职场文书
2015年乡镇工作总结范文
2015/04/22 职场文书
交通肇事罪辩护词
2015/05/21 职场文书
2019最新劳动仲裁申请书!
2019/07/08 职场文书