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 相关文章推荐
Mootools 1.2教程 事件处理
Sep 15 Javascript
extjs 学习笔记 四 带分页的grid
Oct 20 Javascript
js弹出层包含flash 不能关闭隐藏的2种处理方法
Jun 17 Javascript
jQuery下拉美化搜索表单效果代码分享
Aug 25 Javascript
信息页文内画中画广告js实现代码(文中加载广告方式)
Jan 03 Javascript
JavaScript登录记住密码操作(超简单代码)
Mar 22 Javascript
vue 2.0组件与v-model详解
Mar 27 Javascript
jQuery EasyUI 为Combo,Combobox添加清除值功能的实例
Apr 13 jQuery
Vue 指令实现按钮级别权限管理功能
Apr 23 Javascript
js时间转换毫秒的实例代码
Aug 21 Javascript
JS轮播图的实现方法2
Aug 25 Javascript
JavaScript实现跟随鼠标移动的盒子
Jan 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
phpcms模块开发之swfupload的使用介绍
2013/04/28 PHP
php中的比较运算符详解
2013/10/28 PHP
php使用多个进程同时控制文件读写示例
2014/02/28 PHP
php版微信公众平台之微信网页登陆授权示例
2016/09/23 PHP
CI框架数据库查询缓存优化的方法
2016/11/21 PHP
PHP安装memcache扩展的步骤讲解
2019/02/14 PHP
使用新的消息弹出框blackbirdjs
2008/10/16 Javascript
js的alert弹出框出现乱码解决方案
2013/09/02 Javascript
jquery如何实现在加载完iframe的内容后再进行操作
2013/09/10 Javascript
jQuery实现长按按钮触发事件的方法
2015/02/02 Javascript
JS判断网页广告是否被浏览器拦截过滤的代码
2015/04/05 Javascript
js通过keyCode值判断单击键盘上某个键,然后触发指定的事件方法
2017/02/19 Javascript
Bootstrap如何激活导航状态
2017/03/22 Javascript
详解js根据百度地图提供经纬度计算两点距离
2019/05/13 Javascript
基于vue+echarts 数据可视化大屏展示的方法示例
2020/03/09 Javascript
js+canvas实现画板功能
2020/09/13 Javascript
Vue3不支持Filters过滤器的问题
2020/09/24 Javascript
vue组件中节流函数的失效的原因和解决方法
2020/12/02 Vue.js
pygame学习笔记(4):声音控制
2015/04/15 Python
python字典的常用操作方法小结
2016/05/16 Python
Python操作MongoDB详解及实例
2017/05/18 Python
python 文本单词提取和词频统计的实例
2018/12/22 Python
django中账号密码验证登陆功能的实现方法
2019/07/15 Python
Python 动态导入对象,importlib.import_module()的使用方法
2019/08/28 Python
关于keras中keras.layers.merge的用法说明
2020/05/23 Python
python用opencv完成图像分割并进行目标物的提取
2020/05/25 Python
Python中的wordcloud库安装问题及解决方法
2020/05/27 Python
Python如何将装饰器定义为类
2020/07/30 Python
css animation配合SVG制作能量流动效果
2021/03/24 HTML / CSS
工作评语大全
2014/04/26 职场文书
职业规划实施方案
2014/06/10 职场文书
土建专业毕业生自荐书
2014/07/04 职场文书
综治目标管理责任书
2015/05/11 职场文书
安全守法证明
2015/06/23 职场文书
详解Golang如何优雅的终止一个服务
2022/03/21 Golang
Java线程的6种状态与生命周期
2022/05/11 Java/Android