jQuery 插件 的this 指向问题(实战)
daterangepicker 是一个JavaScript组件,用来选择日期。
资源直接搜索 daterangepicker 即可,当然好看的样式可以基于Bootstrap。
官网:http://www.daterangepicker.com/
搭建项目环境
daterangepicker js 基于 jQuery 和 moment
css基于bootstrap
html代码
输入框选择日期
label 用于显示选中的时间
button1 清除 label 时间
button2 重新赋值 label 时间
js代码实现功能
1. input 使用插件,并设置回调函数用来将控件选中的值赋值给 label。具体使用方法查看官网,不是本文重点。
$("input[name=callbackDate]").daterangepicker(
{
singleDatePicker: true, //只显示单日期选择
},function(start, end, label) {
var date = new Date(start);
$("#showTime").html("label time: " +
date.getFullYear() + "年" +
(date.getMonth() + 1) + "月" +
date.getDate() + "日")
}
)
2. button1点击事件设置
$("#clearLabelTime").click(function(){ {
$("#showTime").html("label time: ");
}
3. button2点击事件设置
请问!请问!!请问!!!如何实现?
一个办法,重新获得 input 的时间,写个方法。如果是这样的话,和 this 有毛线关系。
既然是重新设置 label 的时间,那之前肯定是设置过的,什么时候设置的呢?在点击时间控件后调用回调函数。(哦,对了,还有一个方法是重新点击时间控件上的时间,相当于重新选择一次)。
那么插件有没有提供一个方法是:在时间选择以后,重新调用函数的呢?查看源码(别问为什么,官网没有提供,但是我不相信他没有写这个方法)后找到:
其中 cb 就是回调函数绑定到 DateRangePicker 对象上的方法。this 在对象中的指向问题可以看第一篇文章介绍。
如果真是这样,那就很好解决了,按照正常人的思路,将调用 daterangepicker 的地方设置变量,然后调用 notify 方法就哦了。我也这么试了:
var datepicker = $("...").daterangepicker({
...
},function(...){
...
}
)
$("#setLabelTime").click(function(){ {
datepicker.notify();
}
但是浏览器报错没有 notify 方法。
输出 datepicker 对象一看,#¥%……&
datepicker对象居然是一个 jQuery 对象$("input[...]")。
what???
继续看源码:
这段代码是调用的入口,返回this,this是什么呢?
$.fn.这是在扩展 jQuery 对象,daterangepicker是扩展的一个方法,(对象方法中的this指向谁的问题同样参考上一篇文章)。this 指向 jQuery对象$("input[...]")。
到了这时候应该怎么办?放弃吗?怎么可能。
看第六行代码,new了一个DateRangePicker对象,那如果我们能想办法拿到这个对象,是不是就万事大吉了?开干,修改这段代码如下:
重新跑代码,哦了。
关于插件作者代码
当然了,代码中返回什么对象,返回哪个对象的问题,我不明白作者是怎么想的。如果是我来写插件,肯定不会返回一个jQuery对象,因为没什么必要。然而代码中有很多方法是绑定在DateRangePicker原型上的。。。
好吧,这篇文章主要是一个实例介绍 this 在不同环境下的指向问题。
想要这些代码内容的可以在公众号菜单中找到联系方式,或者加 QQ群 422033835
jQuery 插件 的this 指向问题(实战)的更多相关文章
- jQuery插件实战之fullcalendar(日历插件)Demo
jQuery的插件许多,应用的场景也很丰富,今天我这里给大家介绍一款很有用的日历页面开发插件 - fullcalendar,眼下最新版本号是1.5.1,使用这款插件可以高速帮助你高速编程实现基于web ...
- jQuery 插件编程精讲与技巧
适应的读者: 1.有一定的jquery编程基础但是想在技能上有所提升的人 2.前端开发的程序员 3.对编程感兴趣的学生 为什么要学习jquery插件的编写? 为什么要学习jquery插件的编写?相信这 ...
- 锋利的jQuery--编写jQuery插件(读书笔记五)[完结篇]
1.表单验证插件Validation 2.表单插件Form 3.动态事件绑定插件livequery 可以为后来的元素绑定事件 类似于jQuery中的live()方法 4.jQuer ...
- js最详细的基础,jquery 插件最全的教材
一.Js的this,{},[] this是Javascript语言的一个关键字,随着函数使用场合的不同,this的值会发生变化.但是有一个总的原则,那就是this指的是调用的函数自己. { } 大括号 ...
- jQuery插件编写及链式编程模型小结
JQuery极大的提高了我们编写JavaScript的效率,让我们可以愉快的编写代码,做出各种特效.大多数情况下,我们都是使用别人开发的JQuery插件,今天我们就来看看如何把我们常用的功能做出JQu ...
- 40 个让你的网站更加友好的 jQuery 插件
一个插件的基本功能是执行一个含有元素集合的函数数组.每个方法和jQuery核心组成一个插件,如.fadeOut()或.addClass().一个jQuery插件是一个基本的可以扩充jQuery 原型对 ...
- javascript设计模式实践之职责链--具有百叶窗切换图片效果的JQuery插件(三)
在上一篇<javascript设计模式实践之模板方法--具有百叶窗切换图片效果的JQuery插件(二)>里,通过采用模板方法模式完成了切换效果对象的构建编写. 接下来就是完成各效果对象的调 ...
- 40个让你的网站屌到爆的jQuery插件
一 个插件的基本功能是执行一个含有元素集合的函数数组.每个方法和jQuery核心组成一个插件,如.fadeOut()或.addClass().一个 jQuery插件是一个基本的可以扩充jQuery 原 ...
- jQuery插件写法总结以及面向对象方式写法总结
前两个是jQuery插件,后面2个是以对象的形式开发,都类似. 写法一 (function($, window){ // 初始态定义 var _oDialogCollections = {}; // ...
随机推荐
- JS实现排序
排序算法可以分为内部排序和外部排序.内部排序是数据记录在内存中进行排序,外部排序是因排序的数据很大,一次不能够容纳全部的排序记录,在排序中需要访问外存.常见的内部排序算法有插入排序,选择排序,冒泡排序 ...
- VopSdk一个高逼格微信公众号开发SDK(源码下载)
看之前回复很多说明大家很有热情&文章被误删掉了,不想让有的朋友错失这个高逼格的东西,现在重新发布,这次就直接放出源码,文章最末下载地址. 看之前回复很多说明大家很有热情&文章被误删掉了 ...
- 微信小程序之获取当前位置经纬度以及地图显示
最近刚开始接触微信小程序,在弄懂其结构以及相关接口之后,准备着手实现一个小程序,功能包括--获取用户当前位置的经纬度,在地图上查看位置,通过地图获取不同位置的经纬度. 微信小程序的主体部分包括: 新增 ...
- Java中的锁分类
在读很多并发文章中,会提及各种各样锁如公平锁,乐观锁等等,这篇文章介绍各种锁的分类.介绍的内容如下: 公平锁/非公平锁 可重入锁 独享锁/共享锁 互斥锁/读写锁 乐观锁/悲观锁 分段锁 偏向锁/轻量级 ...
- 【Netty】Netty核心组件介绍
一.前言 前篇博文体验了Netty的第一个示例,下面接着学习Netty的组件和其设计. 二.核心组件 2.1. Channel.EventLoop和ChannelFuture Netty中的核心组件包 ...
- percona-xtrabackup安装
二进制包安装(推荐安装方式,不用安装依赖包,非常方便): 1.下载安二进制包: wget https://www.percona.com/downloads/XtraBackup/Perco ...
- for循环-0,1,1,2,2可以组成多少个不重复的五位数?
今天想到了一个比较有意思的for循环题:0,1,1,2,2可以组成多少个不重复的五位数? 它主要是for循环多层嵌套外加if判断,代码如下: protected void Button1_Click( ...
- 微信小程序,前端大梦想(七)
微信小程序之数据缓存实例-备忘录 数据缓存在移动端的使用是非常重要的,既可以减少用户的流量支出又可以提高程序的访问速度和用户体验.每个微信小程序都可以有自己的本地缓存,可以通过 wx.setStora ...
- 将非官方扩展程序加入chrome的白名单
参考来源:http://xclient.info/a/1ddd2a3a-d34b-b568-c0d0-c31a95f0b309.html com.google.Chrome.mobileconfig ...
- 第 13 章 可扩展性设计之 MySQL Replication
前言: MySQL Replication 是 MySQL 非常有特色的一个功能,他能够将一个 MySQL Server 的 Instance 中的数据完整的复制到另外一个 MySQL Server ...