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

时间: 2024-10-11 13:28:02

jQuery 插件 的this 指向问题(实战)的相关文章

jQuery 插件编程精讲与技巧

适应的读者: 1.有一定的jquery编程基础但是想在技能上有所提升的人 2.前端开发的程序员 3.对编程感兴趣的学生 为什么要学习jquery插件的编写? 为什么要学习jquery插件的编写?相信这是很多人都会有的问题,因为目前市面上的插件众多基本上满足日常的开发需求,但是我认为一下的这几点情况是一定要学会插件基础才能解决的: 1.如果有这样的一种场景:假设如果你使用了一个控件,但是这个控件有缺少了一点点的相关的功能,那么如果你不懂jquery插件编写的话,那么你就只能找其他的控件进行补充,这

第七章(插件的使用和写法)(7.6 编写 jQuery 插件)

7.6.1 插件的种类 编写插件的目的是给已经有的一系列方法或函数做一个封装,以便在其他地方重复使用,方便后期维护和提高开发效率. jQuery 的插件主要分为3种类型. 1 封装对象方法的插件 这种插件是将对象方法封装起来,用于对通过选择器获取的 jQuery 对象进行操作,是最常见的一种插件. 据不完全统计,95%以上的 jQuery 插件都是封装对象方法的插件,此类插件可以发挥出 jQuery 选择器的强大优势.有相当一部分的 jQuery 的方法,都是在 jQuery 脚本库内部通过这种

jquery学习(四)-如何书写自定义的jquery插件

来自锋利的jquery第二版 下面我们开始介绍如何通过现有的方法和函数,封装出既符合自己需求,有高效的插件. Jquery插件公分为3类,分别为:封装对象方法的插件.封装全局函数的插件.自定义选择器插件,在介绍插件的三种类型之前,我们先来了解书写插件的基本要点(这里转自aspwzmuma和锋利的jquery): a.插件的文件命名推荐遵循jQuery.[插件名].js的规则,以便于与其他的js文件的区分,如新插件文件jquery.newplugin.js. b.对象级别插件,所有的方法都应依附于

锋利的jQuery--编写jQuery插件(读书笔记五)[完结篇]

1.表单验证插件Validation   2.表单插件Form 3.动态事件绑定插件livequery 可以为后来的元素绑定事件 类似于jQuery中的live()方法 4.jQuery UI   5.jQuery Cookie   6.遮罩层插件:thickbox 7.编写jQuery插件 <1>编写插件的目的:给已经有的一些列方法或函数做一个封装,一遍在其他地方使用,方便后期维护和提高开发效率. <2>三种类型的插件 a:封装对象方法的插件 jQuery.fn.extend()

jquery插件的写法

一.JQuery的插件主要分为3种: 1.封装对象方法的插件. 如JQuery的parent()方法,appendTo()方法,addClass()方法等. 2.封装全局函数的插件. 如JQuery.ajax(),JQuery.trim()方法 3.选择器插件. 二.JQuery的插件机制: i.JQuery提供了两个用于扩展JQuery功能的方法,jQuery.fn.extend()方法和jQuery.extend()方法.前者用于扩展前面的提到的第一种插件,后者用于扩展后两种插件.这两个方法

jquery插件学习相关(1)

jQuery插件机制 jQuery提供了两个用于扩展jQuery功能的方法,即jQuery.fn.extend()和jQuery.extend()方法 jQuery.fn.extend()用于封装对象方法插件 jQuery.extend()用于封装全局函数的插件和选择器插件,同时也可扩展已有的Object对象. jQuery.extend() jQuery.extend(target,obj1...objN) 常用于设置插件方法的一系列默认参数 function foo(option){ opt

jQuery插件编写及链式编程模型小结

JQuery极大的提高了我们编写JavaScript的效率,让我们可以愉快的编写代码,做出各种特效.大多数情况下,我们都是使用别人开发的JQuery插件,今天我们就来看看如何把我们常用的功能做出JQuery插件,然后像使用jQuery那样来操作DOM.  一.jQuery插件开发快速上手 1.jQuery插件模板 关于jQuery插件的编写,我们可以通过为jQuery.fn增加一个新的函数来编写jQuery插件.属性的名字就是你的插件的名字,其模板如下: (function($){ $.fn.m

jQuery插件编写及链式编程模型

jQuery插件编写及链式编程模型小结 JQuery极大的提高了我们编写JavaScript的效率,让我们可以愉快的编写代码,做出各种特效.大多数情况下,我们都是使用别人开发的JQuery插件,今天我们就来看看如何把我们常用的功能做出JQuery插件,然后像使用jQuery那样来操作DOM.  一.jQuery插件开发快速上手 1.jQuery插件模板 关于jQuery插件的编写,我们可以通过为jQuery.fn增加一个新的函数来编写jQuery插件.属性的名字就是你的插件的名字,其模板如下:

【jQuery】学习jQuery插件的使用与写法(表单验证插件-validation)

最新最全的插件可以从jQuery官方网站的插件板块下载,网站地址为:http://plugins.jquery.com/ Validation优点:内置验证规则:自定义验证规则:简单强大的验证信息提示:实时验证. 三种不同的写法 1.1 确认哪个表单需要被验证,引入jquery.validate.js插件 <script type="text/javascript"> $(document).ready(function(){ $("#commentForm&qu