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 相关文章推荐
疯掉了,尽然有js写的操作系统
Apr 23 Javascript
asp 取文本框名称代码
Dec 02 Javascript
js修改地址栏URL参数解决url参数问题
Dec 15 Javascript
浅谈javascript 函数表达式和函数声明的区别
Jan 05 Javascript
javascript加减乘除的简单实例
Jul 12 Javascript
JavaScript中splice与slice的区别
May 09 Javascript
javascript中new Array()和var arr=[]用法区别
Dec 01 Javascript
vue根据进入的路由进行原路返回的方法
Sep 26 Javascript
图片文字识别(OCR)插件Ocrad.js教程
Nov 26 Javascript
深入理解js A*寻路算法原理与具体实现过程
Dec 13 Javascript
JavaScript实现简单的计算器
Jan 16 Javascript
利用JavaScript模拟京东按键输入功能
Dec 01 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源代码
2009/08/21 PHP
用PHP实现小写金额转换大写金额的代码(精确到分)
2012/01/10 PHP
实例讲解YII2中多表关联的使用方法
2017/07/21 PHP
运用Windows XP附带的Msicuu.exe、Msizap.exe来彻底卸载顽固程序
2007/04/21 Javascript
JQuery循环滚动图片代码
2011/12/08 Javascript
jquery仿QQ商城带左右按钮控制焦点图片切换滚动效果
2013/06/27 Javascript
node.js中的fs.ftruncate方法使用说明
2014/12/15 Javascript
使用JavaScript+canvas实现图片裁剪
2015/01/30 Javascript
详解jQuery向动态生成的内容添加事件响应jQuery live()方法
2015/11/02 Javascript
基于jQuery实现多标签页切换的效果(web前端开发)
2016/07/24 Javascript
leaflet的开发入门教程
2016/11/17 Javascript
JSONP跨域请求
2017/03/02 Javascript
100行代码理解和分析vue2.0响应式架构
2017/03/09 Javascript
详解使用element-ui table组件的筛选功能的一个小坑
2018/11/02 Javascript
微信小程序页面缩放式侧滑效果的实现代码
2018/11/15 Javascript
微信小程序云开发 生成带参小程序码流程
2019/05/18 Javascript
微信小程序缓存支持二次开发封装实现解析
2019/12/16 Javascript
Vue中通过属性绑定为元素绑定style行内样式的实例代码
2020/04/30 Javascript
简化Python的Django框架代码的一些示例
2015/04/20 Python
python 删除大文件中的某一行(最有效率的方法)
2017/08/19 Python
利用Python如何生成hash值示例详解
2017/12/20 Python
Tensorflow卷积神经网络实例
2018/05/24 Python
django2+uwsgi+nginx上线部署到服务器Ubuntu16.04
2018/06/26 Python
python画折线图的程序
2018/07/26 Python
Selenium(Python web测试工具)基本用法详解
2018/08/10 Python
python 利用pandas将arff文件转csv文件的方法
2019/02/12 Python
Python发展史及网络爬虫
2019/06/19 Python
python原类、类的创建过程与方法详解
2019/07/19 Python
django的403/404/500错误自定义页面的配置方式
2020/05/21 Python
基于Python制作一副扑克牌过程详解
2020/10/19 Python
农民工讨薪标语
2014/06/26 职场文书
元旦标语大全
2014/10/09 职场文书
三严三实学习心得体会
2014/10/13 职场文书
毕业生自荐求职信书写的技巧
2019/08/26 职场文书
pytorch交叉熵损失函数的weight参数的使用
2021/05/24 Python
《艾尔登法环》发布最新「战技」宣传片
2022/04/03 其他游戏