zoukankan      html  css  js  c++  java
  • ie_placeholder最佳兼容方案

    https://gitee.com/hustcc/placeholder.js
    巧妙的使用了canvas.toDataURL(),动态生成了一个背景图,可以作为兼容IE9-的placeholder方案。perfect!!!!!

    基于这个可以对placeholder进行兼容,以下是扩展代码:
    /**
     * Created by Administrator on 2017/7/18 0018.
     * Time: 16:11
     * https://gitee.com/hustcc/placeholder.js
     * version: 2018-1-11 16:14:47
     */
    import placeholder from "placeHolder.js"
    /**
     * 判断是否支持placeholder
     * @returns {boolean}
     */
    var supportPlaceHoder = () => {
        return "placeholder" in document.createElement("input");
    }
    //placehoder默认配置
    var defaultOption = {
        //我用的input是高度38的
        size: '200x38',
        bgcolor: 'rgba(0,0,0,0)',
        color: '#777777',
        fsize: '14',
        fweight: "normal",
        ffamily: "微软雅黑"
    }
    function cssValue2Num(cssValue) {
        return cssValue.replace("px", "") * 1;
    }
    /**
     * 根据placeholder长度计算宽度,生成背景图片
     * @param text
     * @param 扩展:textAlign placeholder文字是否input居中,默认靠右
     * @returns {*}
     */
    var createPlaceHolderImg = function (textAlign) {
        var $self = $(this), text = $.trim($self.attr("placeholder")),
            imgWidth = (textAlign && textAlign === "center") ? $self.width() : (function () {
                //创建一个元素隐藏于页面,用来计算图片宽度
                var $span = $("<span>").addClass("placeholder-temp")
                    .css("font-size", $self.css("font-size")).text(text);
                $("body").append($span);
                var width = $span.width();
                //获取padding和text-indent实现背景中文字的text-indent效果
                return $span.remove(), $span == null, width + cssValue2Num($self.css("text-indent")) * 2 + cssValue2Num($self.css("padding-left")) * 2;
            }());
        //创建节点,计算placeholder宽度
        return placeholder.getData($.extend(true, {}, defaultOption, {
            text: text,
            size: imgWidth + "x38",
            fsize: cssValue2Num($self.css("font-size"))
        }));
    }
    /**
     * 初始化placeholder
     */
    var initPlaceHolder = () => {
        $(":text,textarea,:password").each(function (index, item) {
            var $item = $(item), val = $.trim($item.val()), placeholderText = $item.attr("placeholder");
            (!!placeholderText && (val === "" || val.length === 0)) && $item.attr("style", "background:url('" + createPlaceHolderImg.apply(item) + "') no-repeat left center;");
        })
        //keyup用来兼容IE9粘贴和backspace不触发change事件
            .on("input propertychange keyup blur", function (e) {
                var $this = $(this), val = $.trim($this.val());
                (val === "" || val.length === 0) ? $this.removeClass("no-placeholder") : $this.addClass("no-placeholder");
            });
    }
    $(function () {
        !supportPlaceHoder() && initPlaceHolder();
    });
    View Code
    
    

     如果你的网站还在兼容IE9-,那么千万不要用value的方式进行兼容placeholder,一个简单的表单验证,一个简单的数据加密功能,都会让你死无葬身之地!!

     如果你的网站还在兼容IE9-,那么千万不要用value的方式进行兼容placeholder,一个简单的表单验证,一个简单的数据加密功能,都会让你死无葬身之地!!

     如果你的网站还在兼容IE9-,那么千万不要用value的方式进行兼容placeholder,一个简单的表单验证,一个简单的数据加密功能,都会让你死无葬身之地!!

     


  • 相关阅读:
    PyQt作品 – PingTester – 多点Ping测试工具
    关于和技术人员交流的一二三
    Pyjamas Python Javascript Compiler, Desktop Widget Set and RIA Web Framework
    Hybrid Qt applications with PySide and Django
    pyjamas build AJAX apps in Python (like Google did for Java)
    PyQt 维基百科,自由的百科全书
    InfoQ:请问为什么仍要选择Java来处理后端的工作?
    Eric+PyQt打造完美的Python集成开发环境
    python select module select method introduce
    GUI Programming with Python: QT Edition
  • 原文地址:https://www.cnblogs.com/Brose/p/ie_placeholder.html
Copyright © 2011-2022 走看看