有的浏览器支持html5的水印placeholder(如Crome,firefox,ie10+),有的不支持html5的placeholder(ie9,ie8,ie7....),对于不支持placeholder的属性也能使用placeholderAttr,于是写了这个简单的jquery插件,发出来与大家分享,实现代码逻辑在代码中都有注释,实现细节请直接参看代码。

/**
* jqueryPlug : 给不支持html5 placeholder水印功能的浏览器打补丁
*/ ;(function($){
'use strict';
///////////////////////////////////////////////////////// /*
* 扩展jquery实例方法
*/
$.fn.powerplaceholder = function(){ /*
* PlaceHolder 实例构造函数
* @param [DOM Instance] elm
*/
var PlaceHolder = function(elm){
this.$elm = $(elm);
this.$span = $("<span></span>").text(this.$elm.attr("placeholder")).css({
"position":"absolute",
"display":"inline-block",
"color":"#ccc",
"overflow":"hidden",
"padding-left":"2px",
"padding-top":"2px",
"left":this.$elm.offset().left,
"top":this.$elm.offset().top,
"font-size":this.$elm.css("font-size"),
"width":this.$elm.width()+2,
"height":this.$elm.height()+2
}).appendTo("body");
this.init();
} /**
* 静态方法:是否支持html5的placeholder
*/
PlaceHolder.isSupportHtml5 = function(){
var i = document.createElement('input');
return 'placeholder' in i;
} /**
* 实例方法:
*/
PlaceHolder.prototype = { /*
* 控制setInterval方法的实例,释放setInterval
*/
intervalInstance:null, /*
* @function 初始化
*/
init:function(){
this.showOrHide(); this.$elm.on("focus.PlaceHolder",$.proxy(this.focus,this))
.on("blur.PlaceHolder",$.proxy(this.blur,this)); this.$span.on("click.PlaceHolder",$.proxy(this.clickSpan,this));
}, /*
* 聚焦
*/
focus:function(){
var self = this; // 不要重复调用setInterval
if (self.intervalInstance) {
return;
} /*
* 应该所示插件的核心:每隔50s判断一下输入框是否有值,有值显示,无值隐藏;
* 权衡是否这里应该使用keydown来做这个事情,使用setInverval是不是太耗费资源了??
*/
self.intervalInstance = setInterval(function(){
self.showOrHide();
},50);
}, /*
* 失焦
*/
blur:function(){ // clearInterval
clearInterval(this.intervalInstance);
this.intervalInstance = null; this.showOrHide();
}, /*
* 点击span时要触发输入框的focus事件
*/
clickSpan:function(){
this.$elm.trigger("focus.PlaceHolder");
}, /*
* 输入框有值显示placeholder,没有值隐藏placeholder
*/
showOrHide:function(){
if (this.$elm.val()) {
this.$span.hide();
}else{
this.$span.show();
}
}
}; /**
* 插件入口
* 支持html5的,采用原生态支持,不做任何处理;不支持html5 placeholder的采用插件实现模式支持
*/
if (!PlaceHolder.isSupportHtml5()) {
return this.each(function(){
new PlaceHolder(this);
});
}else{
return this;
};
}
})(jQuery);
 
 
分类: Jquery

jquery水印插件:placeholder的更多相关文章

  1. JQuery文本框水印插件的简单实现

    采用JQuery实现文本框的水印效果非常容易,效果如下: 代码片段,定义要应用水印效果的文本框的样式: .watermark { color: #cccccc; } 将JavaScript代码封装成J ...

  2. Jquery插件placeholder的用法

    闲的蛋疼,演示一下Jquery插件placeholder的用法,借助该插件能够轻松实现HTML5中placeholder特效: 效果图: 实现代码: <%@ page language=&quo ...

  3. 基于jquery 的插件,让IE支持placeholder属性

    开发一个项目的时候为了美观和用户体验用到了input标签的placeholder属性,但是这个属性是html5中的,所以低版本的IE浏览器不支持.于是在百度找了一些解决方法,找了好几个都不是那么完美, ...

  4. jquery.validate插件在booststarp中的运用

    现在在网络上已经可以找到很多基于bootstarp的表单认证,但是验证的都不全面的,下载后,我们还要理解作者的思路然后进行修改添加,这种修改方式往往适合学习,时间很多的时候.但是我们很多时候是没有时间 ...

  5. jquery.dataTables插件使用例子详解

    DataTables是一个jQuery的表格插件.这是一个高度灵活的工具,依据的基础逐步增强,这将增加先进的互动控制,支持任何HTML表格 效果图 代码 <!doctype html> & ...

  6. 【jQuery】(6)---jQuery validate插件

    jQuery  validate插件 一.导入js库                                      先导入jQuery库,然后导入Validate插件,如果是中文提示还需要 ...

  7. jquery表格插件Datatables使用、快速上手

    Datatables使用 一.简介 官网:https://datatables.net/ 中文官网:http://datatables.club/ Datatables是一款jquery表格插件.它是 ...

  8. 深入学习jQuery自定义插件

    原文地址:jQuery自定义插件学习 1.定义插件的方法 对象级别的插件扩展,即为jQuery类的实例增加方法, 调用:$(选择器).函数名(参数);      $(‘#id’).myPlugin(o ...

  9. [jQuery]jQuery DataTables插件自定义Ajax分页实现

    前言 昨天在博客园的博问上帮一位园友解决了一个问题,我觉得有必要记录一下,万一有人也遇上了呢. 问题描述 园友是做前端的,产品经理要求他使用jQuery DataTables插件显示一个列表,要实现分 ...

随机推荐

  1. Visual Studio GitHub For Windows部署

    使用GitHub For Windows部署Visual Studio项目 因为最近同时再看很多技术方面的书,书上的例子有很多自己想亲自尝试一下,但是每次写例子都得创建一个新项目未免太麻烦,索性就整理 ...

  2. strip 使用命令

    使用 通过消除使用调试器的粘合剂和符号信息,减少扩展公共对象文件格式(XCOFF)对象文件大小. 语法 strip [ -V ] [ -r [ -l ] | -x [ -l ] | -t | -H | ...

  3. 几个更新(Update声明)查询方法

    积极 文化: 上的方法,数据库更新Update.的标准格式:Update 表名 set =值 where 条件只是依据数据的来源不同,还是有所差别的:  1.从外部输入这样的比較简单例:update ...

  4. paramiko socket.error: Int or String expected

    paramiko socket.error: Int or String expected paramiko的环境: Python 2.6.6 paramiko==1.14.0 正常的paramiko ...

  5. sql事务,在sql2000里判断执行是否成功用@@ERROR 判断

    原文:sql事务,在sql2000里判断执行是否成功用@@ERROR 判断 贴个sql事务,在sql2000里判断执行是否成功用@@ERROR 判断 这个东西多少还是有点问题,sql2005了可以用t ...

  6. 【Head First Javascript】学习笔记0——自己制作chm参考手册素材

    变量声明:var 常量声明:const 数据格式转换: 1.转换函数 parseInt(A):把字符串A转换成整数:其中A为只包含数字的字符串 parseFloat(A):把字符串A转换成浮点数:其中 ...

  7. C#面向对象复习概要

    1.面向对象:我们将具有统一行为和属性的对象抽象划分为类,通过类去创建对象.这种编程思想叫做面向对象的编程思想. 2.属性:对象具有的属性 using System; using System.Col ...

  8. Middleware开发入门

    Middleware开发入门 上篇我们谈了Host和Server的建立,但Host和Server无法产出任何有实际意义的内容,真正的内容来自于加载于Server的Middleware,本篇我们就着重介 ...

  9. SSH深度历险记(两) Jboss+EJB一审

    学习感悟:每次学习新知识.通过初审会从小事做起,获得成就感.经典Hello Workd我们成功的例子奠定了门哈,呢.非常好的理解了.Ejb的核心. 今天主要以这个小实例,来学习EJB的分布式,我们能够 ...

  10. linux 多个源文件在编译时会产生一个目标文件

    obj-m := target.o target-objs :=  src1.o src2.o src3.o 版权声明:本文博客原创文章.博客,未经同意,不得转载.