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 相关文章推荐
JavaScript中的Array对象使用说明
Jan 17 Javascript
JQuery.closest(),parent(),parents()寻找父结点
Feb 17 Javascript
onmouseover和onmouseout的一些问题思考
Aug 14 Javascript
javascript闭包传参和事件的循环绑定示例探讨
Apr 17 Javascript
js实现各浏览器全屏代码实例
Jul 03 Javascript
Vue自定义弹窗指令的实现代码
Aug 13 Javascript
vue单文件组件lint error自动fix与styleLint报错自动fix详解
Jan 08 Javascript
JQuery实现简单的复选框树形结构图示例【附源码下载】
Jul 16 jQuery
微信小程序页面渲染实现方法
Nov 06 Javascript
js实现简单的秒表
Jan 16 Javascript
vue数据字典取键值项目的字典问题
Apr 12 Vue.js
js前端设计模式优化50%表单校验代码示例
Jun 21 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 高性能书写
2010/12/11 PHP
PHP实现把文本中的URL转换为链接的auolink()函数分享
2014/07/29 PHP
详解PHP中的mb_detect_encoding函数使用方法
2015/08/18 PHP
学习php设计模式 php实现门面模式(Facade)
2015/12/07 PHP
PHP简单判断iPhone、iPad、Android及PC设备的方法
2016/10/11 PHP
ThinkPHP框架获取最后一次执行SQL语句及变量调试简单操作示例
2018/06/13 PHP
解放web程序员的输入验证
2006/10/06 Javascript
纯js实现的论坛常用的运行代码的效果
2008/07/15 Javascript
jquery 学习笔记 传智博客佟老师附详细注释
2020/09/12 Javascript
php,js,css字符串截取的办法集锦
2014/09/26 Javascript
AngularJS中取消对HTML片段转义的方法例子
2015/01/04 Javascript
JavaScript中DOM详解
2015/04/13 Javascript
JavaScript中的toLocaleDateString()方法使用简介
2015/06/12 Javascript
jQuery unbind()方法实例详解
2016/01/19 Javascript
smartupload实现文件上传时获取表单数据(推荐)
2016/12/12 Javascript
利用JS实现简单的瀑布流加载图片效果
2017/04/22 Javascript
深入理解Javascript中的作用域链和闭包
2017/04/25 Javascript
nodejs操作mongodb的填删改查模块的制作及引入实例
2018/01/02 NodeJs
使用vux实现上拉刷新功能遇到的坑
2018/02/08 Javascript
vue-cli 组件的导入与使用教程详解
2018/04/11 Javascript
js如何找出字符串中的最长回文串
2018/06/04 Javascript
Python中使用Inotify监控文件实例
2015/02/14 Python
Python3使用requests发闪存的方法
2016/05/11 Python
使用k8s部署Django项目的方法步骤
2019/01/14 Python
解决python-docx打包之后找不到default.docx的问题
2020/02/13 Python
Python装饰器用法与知识点小结
2020/03/09 Python
Python生成并下载文件后端代码实例
2020/08/31 Python
Python的scikit-image模块实例讲解
2020/12/30 Python
鲜为人知的HTML5语音合成功能
2019/05/17 HTML / CSS
临床医师专业个人自我评价范文
2013/11/07 职场文书
新郎父亲婚宴答谢词
2014/01/11 职场文书
办公室主任先进事迹
2014/01/18 职场文书
关于护士节的演讲稿
2014/05/26 职场文书
学校重阳节活动总结
2015/03/24 职场文书
入党介绍人意见怎么写
2015/06/03 职场文书
2016年“9.22”世界无车日活动小结
2016/04/05 职场文书