兼容IE9+的placeholder写法

由于是在vue项目中遇到的这个问题,所以这里就以vue为例子,html页面也是一样的逻辑:

// 在这里先写一个方法methods
addplaceholder() {
    if ($("#modifypwd .placeholder").length > 0) {
        $('.placeholder').remove();
    }
    $("[placeholder]").each(function() {
        var _this = $(this);
        var left = _this.css("padding-left");
        _this.parent().append('<span class="placeholder" data-type="placeholder" style="left: ' + left + '">' + _this.attr("placeholder") + '</span>');
        if (_this.val() != "") {
            _this.parent().find("span.placeholder").hide();
        } else {
            _this.parent().find("span.placeholder").show();
        }
    }).on("focus", function() {
        $(this).parent().find("span.placeholder").hide();
    }).on("blur", function() {
        var _this = $(this);
        if (_this.val() != "") {
            _this.parent().find("span.placeholder").hide();
        } else {
            _this.parent().find("span.placeholder").show();
        }
    });
    // 点击表示placeholder的标签相当于触发input
    $("span.placeholder").on("click", function() {
        $(this).hide();
        $(this).siblings("[placeholder]").trigger("click");
        $(this).siblings("[placeholder]").trigger("focus");
    });
}

然后把这个方法放在你需要的钩子方法里执行

openModal() {
    this.$nextTick(function() {
        function placeholderSupport() {
            return 'placeholder' in document.createElement('input');
        }
        if (!placeholderSupport()) { // 判断浏览器是否支持 placeholder
            this.addplaceholder();
        }
    }.bind(this));
}

在写入对应的样式即可,样式可以修改成自己想要的

#modifypwd input::-webkit-input-placeholder {
    /* WebKit browsers */
    color: #999;
}

#modifypwd input:-moz-placeholder {
    /* Mozilla Firefox 4 to 18 */
    color: #999;
}

#modifypwd input::-moz-placeholder {
    /* Mozilla Firefox 19+ */
    color: #999;
}

#modifypwd input::-ms-input-placeholder {
    /* Internet Explorer 10+ */
    color: #999;
}

#modifypwd .placeholder {
    position: absolute;
    top: 0px;
    left: 10px !important;
    z-index: 10;
    color: #aaaaaa;
}

由于不同浏览器的展现形式是不同的,IE这个大坑就是和其他浏览器不一样,主流浏览器都是输入事件触发的placeholder,而IE是聚焦事件触发的

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  •   JavaScript 与 HTML 之间的交互是通过事件实现的。   事件,就是文档或浏览器窗口中发生的一些特...
    霜天晓阅读 3,578评论 1 11
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 27,887评论 1 45
  • 一:什么是闭包?闭包的用处? (1)闭包就是能够读取其他函数内部变量的函数。在本质上,闭包就 是将函数内部和函数外...
    xuguibin阅读 9,808评论 1 52
  • 1、感恩奇迹30飞扬大师姐带的早课,开启我美好的一天。谢谢,谢谢,谢谢! 2、感恩面包师徐小厨耐心教我们做半熟芝士...
    钟秀芳幸福来敲门1306009阅读 254评论 0 0
  • 我的生活里没有诗 长期以来,人们都会因为我的职业问我“你哪里人?”我说我是云南人,第二句“云南很好噢!”我说是的,...
    李研书柜阅读 222评论 0 0