下面代码实测通过,直接copy到本地运行即可。

<!DOCTYPE html>
<html> <head>
<meta charset="UTF-8">
<title></title>
<script src="https://cdn.bootcss.com/angular.js/1.2.14/angular.min.js"></script>
<style>
.yf-input-container {
position: relative;
font-size: 14px;
margin-bottom: 10px;
} .yf-input-container input {
height: 20px;
line-height: 20px;
}
</style>
</head> <body>
<div ng-controller="superPoolCtrl">
<div class="yf-input-container">
姓名:<input type="text" ng-model="name" yf-placeholder="请输入姓名" />
</div>
<div class="yf-input-container">
电话:<input type="text" ng-model="tel" yf-placeholder="请输入电话" />
</div>
<div>
<div class="yf-input-container">
职位:<input type="text" ng-model="job" yf-placeholder="请输入职位" />
</div>
</div>
</div>
<script>
var moduleName = 'bidmeApp';
var app = angular.module(moduleName, [])
.controller('superPoolCtrl', ['$scope', '$rootScope', '$timeout', function($scope, $rootScope, $timeout) {
$timeout(function() {
$scope.tel = "13800138000";
}, 1000);
$scope.name = "http://www.cnblogs.com/chenchenghua/";
}])
.directive('yfPlaceholder', function() {
return {
restrict: 'A', //指令取属性
scope: false, //与父级共享作用域
replace: true,
require: '',
template: function(elem, attr) {
return '<input />'
},
link: function(scope, element, attr) {
var inputEle = element[0];
var supportPlaceholder = "placeholder" in document.createElement("input") ? true : false;
if(supportPlaceholder) {
inputEle.setAttribute('placeholder', attr.yfPlaceholder);
} else {
function insertAfter(newElement, targetElement) { // newElement是要追加的元素 targetElement 是指定元素的位置
var parent = targetElement.parentNode; // 找到指定元素的父节点
if(parent.lastChild == targetElement) { // 判断指定元素的是否是节点中的最后一个位置 如果是的话就直接使用appendChild方法
parent.appendChild(newElement, targetElement);
} else {
parent.insertBefore(newElement, targetElement.nextSibling);
};
};
var node = angular.element(document.createElement('span'));
node.css({
position: 'absolute',
zIndex: '1',
color: '#A9A9A9',
top: inputEle.offsetTop + 'px',
left: inputEle.offsetLeft + 'px',
width: inputEle.offsetWidth + 'px',
height: inputEle.offsetHeight + 'px',
lineHeight: inputEle.offsetHeight + 'px',
textIndent: '5px',
cursor: 'text'
}).text(attr.yfPlaceholder);
angular.element(inputEle).after(node); node.on('click', function(a, b, c) { //点击placeholder,隐藏。input获取焦点
node.css({
"display": 'none'
});
inputEle.focus();
}); angular.element(inputEle).on('blur', function() { //input失去焦点时,做判断
if(inputEle.value.length < 1) {
node.css({
"display": 'block'
});
}
}); angular.element(inputEle).on('focus', function() { //input失去焦点时,做判断
if(inputEle.value.length < 1) {
node.css({
"display": 'none'
});
}
}); scope.$watch(attr.ngModel, function(newVal, oldVal) { //监听,比如开始有值或者异步请求回显,placeholder隐藏
if(!!newVal && newVal.length > 0) {
node.css({
"display": 'none'
});
}
});
}
}
};
});
angular.bootstrap(document.body, [moduleName]);
</script>
</body> </html>

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

欢迎转载,转载请注明作者:飘飞的夏秋 和出处 http://www.cnblogs.com/chenchenghua/p/6757736.html

angular自定义指令解决IE89不支持input的placeholder属性的更多相关文章

  1. Angular自定义指令(directive)

    angular自定义指令,意我们可以通过angula自己定义指令,来实现我们的特殊要求,为所欲为,一支穿云箭,千军万马来相见 多少年的老规矩了,先看代码: <!DOCTYPE html> ...

  2. angular 自定义指令详解 Directive

    在angular中,Directive,自定义指令的学习,可以更好的理解angular指令的原理,当angular的指令不能满足你的需求的时候,嘿嘿,你就可以来看看这篇文章,自定义自己的指令,可以满足 ...

  3. 让IE下支持Html5的placeholder属性

    HTML5对Web Form做了许多增强,比如input新增的type类型.Form Validation等. Placeholder 是HTML5新增的另一个属性,当input或者textarea设 ...

  4. Hmtl5 <input>中placeholder属性(新属性)

    Hmtl5 <input>中placeholder属性(新属性) 一.定义和用法 placeholder 属性提供可描述输入字段预期值的提示信息(hint). 该提示会在输入字段为空时显示 ...

  5. Angular17 Angular自定义指令

    1 什么是HTML HTML文档就是一个纯文本文件,该文件包含了HTML元素.CSS样式以及JavaScript代码:HTML元素是由标签呈现,浏览器会为每个标签创建带有属性的DOM对象,浏览器通过渲 ...

  6. 【vuejs深入一】深入学习vue指令,自定义指令解决开发痛点

    写在前面  一个好的架构需要经过血与火的历练,一个好的工程师需要经过无数项目的摧残. 最近博主我沉淀了几个月,或者说懒了几个月.然而大佬的指点总是一针见血,能够让人看到方向.所以我现在有觉得,一个好的 ...

  7. 深入学习vue指令,自定义指令解决开发痛点

    每天学习一点点 编程PDF电子书.视频教程免费下载:http://www.shitanlife.com/code v-model指令 vue.js的定义是一个mvvm框架,将它发挥到极致能够极大的提升 ...

  8. Angular自定义指令directive:scope属性

    在AngularJS中,除了内置指令如ng-click等,我们还可以自定义指令.自定义指令,是为了扩展DOM元素的功能.代码中,通过指定directive中的restrict属性,来决定这个指令是作为 ...

  9. angular自定义指令命名的那个坑

    Directive 先从定义一个简单的指令开始. 定义一个指令本质上是在HTML中通过元素.属性.类或注释来添加功能.AngularJS的内置指令都是以ng开头,如果想自定义指令,建议自定义一个前缀代 ...

随机推荐

  1. jquery加载单文件vue组件

    /**注册组件 */ function registerComponent(name){ dm[name] = {}; Vue.component(name + '-component', funct ...

  2. 关于锚点定位,ul设置fixed后,div被覆盖一部分的问题

    例如: 问题: 刚开始的时候 .ul是正常显示的,当页面的滚动条滚动到一定的高度是 ,ul就被设置为 position:fixed:那么 点击 li相对应div就会被 固定定位的ul覆盖住一部分. 解 ...

  3. 彻底解决matplotlib中文乱码问题(转)

    彻底解决matplotlib中文乱码问题 1.环境查看a.系统版本查看[hadoop@p168 ~]$ cat /etc/redhat-releaseCentOS Linux release 7.2. ...

  4. js中的 == 与 === 、永远不要使用 ==

    前言: 很久没有复习基础了,所以导致做项目的时候被坑,咳咳,基础还是很重要的. === 是没有强制类型转换的,和其他大部分语言的 == 是一样的.而js中 == 是有类型转换的,这也是js饱受诟病的原 ...

  5. springmvc整合mybatis详细教程

    需求:整合springmvc和mybatis 整合的目标是:控制层采用springmvc,持久层使用mybatis 整合思想 dao层: 1.SqlMapConfig.xml.空文件即可.但是需要头文 ...

  6. JavaScript Ajax 实现学习

    创建异步对象: function createXmlHttp(){ var xhobj=false; try{ xhobj=new ActiveXObject("Msxml2.XMLHTTP ...

  7. PHP返回404状态码,由服务器处理

    1. 通过header()方法来实现, 最简单的方法,而且对php的版本没什么限制    <?php          header('HTTP/1.1 404 Not Found');     ...

  8. html控件

    checkbox val = "<li class='layer'><label><input type='checkbox' checked name='la ...

  9. <数据挖掘导论>读书笔记2

    1.频率和众数 frequency(vi)=具有属性值vi的对象数/m 分类属性的众数mode是具有最高频率的值. 2.百分位数 3.位置度量:均值和中位数 4.散布度量:极差和方差 绝对平均偏差 A ...

  10. 使用 Qt 获取 UDP 数据并显示成图片

    一个项目,要接收 UDP 数据包,解析并获取其中的数据,主要根据解析出来的行号和序号将数据拼接起来,然后将拼接起来的数据(最重要的数据是 R.G.B 三个通道的像素值)显示在窗口中.考虑到每秒钟要接收 ...