有的浏览器支持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. MSMQ-发送消息到远程专用队列 实例

    目录 一:MSMQ的一些理论上的知识 二:队列类型(Queue Type) 三:安装消息队列 四:在C#中Messagequeue class 五:MSMQ-发送消息到远程专用队列 六:例子   一. ...

  2. Handler详细说明系列(六)——View的post()详解

    MainActivity例如下列: package cc.testui2; import android.os.Bundle; import android.view.View; import and ...

  3. ASP.NET 5- 1

    ASP.NET 5 入门(1) - 建立和开发ASP.NET 5 项目   ASP.NET入门(1) - 建立和开发ASP.NET 5 项目 建立项目 首先,目前只有VS 2015支持开发最新的ASP ...

  4. HDU 4791 &amp; ZOJ 3726 Alice&#39;s Print Service (数学 打表)

    题目链接: HDU:http://acm.hdu.edu.cn/showproblem.php?pid=4791 ZJU:http://acm.zju.edu.cn/onlinejudge/showP ...

  5. T4模板生成不同部署环境下的配置文件

    使用T4模板生成不同部署环境下的配置文件 在开发企业级应用的时候,通常会有不同的开发环境,比如有开发环境,测试环境,正式环境,生产环境等.在一份代码部署到不同环境的时候,不同环境的配置文件可能需要根据 ...

  6. UIAutomator源码分析之启动和运行

    通过上一篇<Android4.3引入的UiAutomation新框架官方简介>我们可以看到UiAutomator其实就是使用了UiAutomation这个新框架,通过调用Accessibi ...

  7. jqgrid-asp.net-mvc

    jqgrid-asp.net-mvc 你是否使用jqgrid? 你是否想在C#/asp.net mvc中使用jqgrid? 那你很可能曾经为了分析jqgrid的request url用fiddler忙 ...

  8. 快速构建Windows 8风格应用3-打包发布应用

    原文:快速构建Windows 8风格应用3-打包发布应用 本篇博文主要介绍如何打包应用程序,成功后如何部署应用程序,最后介绍如何发布应用程序到应用商店中. 如何打包Windows 8风格应用程序呢? ...

  9. sb2-admin

    近期开发中遇到的问题总结   最近准备把后台管理系统重新设计开发下,使用了bootstrap,在网上找了个漂亮的后台模板:sb2-admin,在使用中遇到了不少问题,总结下,以免以后忘记. 1.EF5 ...

  10. PHP 11:函数

    原文:PHP 11:函数 本文章介绍PHP的函数.如何学习呢?可以从以下几个方面考虑 函数是如何定义的?区分大小写吗? 函数的参数是如何定义的? 函数是否支持重载? 函数的返回值是如何定义的. 函数有 ...