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 Event事件学习第一章 Event介绍
Feb 07 Javascript
jquery乱码与contentType属性设置问题解决方案
Jan 07 Javascript
JS对象转换为Jquery对象示例
Jan 26 Javascript
JS获取随机数函数可自定义最小值最大值
May 08 Javascript
关于获取DIV内部内容报错的原因分析及解决办法
Jan 29 Javascript
仅9张思维导图帮你轻松学习Javascript 就这么简单
Jun 01 Javascript
web前端开发upload上传头像js示例代码
Oct 22 Javascript
JS基于递归实现倒计时效果的方法
Nov 26 Javascript
初识 Vue.js 中的 *.Vue文件
Nov 22 Javascript
vue 注册组件的使用详解
May 05 Javascript
Vue实现一个图片懒加载插件
Mar 11 Javascript
基于JavaScript实现轮播图效果
Jan 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中的Swoole
2016/04/05 PHP
php封装db类连接sqlite3数据库的方法实例
2017/12/19 PHP
Laravel jwt 多表(多用户端)验证隔离的实现
2019/12/18 PHP
将函数的实际参数转换成数组的方法
2010/01/25 Javascript
JQUERY1.6 使用方法四 检测浏览器
2011/11/23 Javascript
Jquery easyUI 更新行示例
2014/03/06 Javascript
jQuery实现仿路边灯箱广告图片轮播效果
2015/04/15 Javascript
JS组件Bootstrap Table表格多行拖拽效果实现代码
2015/12/08 Javascript
jQuery Validate表单验证深入学习
2015/12/18 Javascript
JavaScript动态设置div的样式的方法
2015/12/26 Javascript
js鼠标按键事件和键盘按键事件用法实例汇总
2016/10/03 Javascript
JavaScript中的return布尔值的用法和原理解析
2017/08/14 Javascript
轻松搞定jQuery+JSONP跨域请求的解决方案
2018/03/06 jQuery
送你43道JS面试题(收藏)
2019/06/17 Javascript
详解Vuex下Store的模块化拆分实践
2019/07/31 Javascript
关于vue项目中搜索节流的实现代码
2019/09/17 Javascript
浅析webpack-bundle-analyzer在vue-cli3中的使用
2019/10/23 Javascript
axios如何取消重复无用的请求详解
2019/12/15 Javascript
jQuery实现滑动开关效果
2020/08/02 jQuery
Jquery+javascript实现支付网页数字键盘
2020/12/21 jQuery
Python抓取京东图书评论数据
2014/08/31 Python
Python编写Windows Service服务程序
2018/01/04 Python
用PyInstaller把Python代码打包成单个独立的exe可执行文件
2018/05/26 Python
Python变量作用域LEGB用法解析
2020/02/04 Python
澳大利亚网上玩具商店:Mr Toys Toyworld
2018/03/25 全球购物
亚洲航空公司官方网站:AirAsia
2019/11/25 全球购物
类和结构的区别
2012/08/15 面试题
大学生入党自我鉴定
2013/10/31 职场文书
大学生创业计划书的范文
2014/01/07 职场文书
《纸船和风筝》教学反思
2014/02/15 职场文书
听课评语大全
2014/04/30 职场文书
优质护理服务演讲稿
2014/05/07 职场文书
教师个人读书活动总结
2014/07/08 职场文书
乡镇群众路线教育实践活动整改措施
2014/10/04 职场文书
诉讼授权委托书
2014/10/15 职场文书
使用 JavaScript 制作页面效果
2021/04/21 Javascript