jQuery中toggle方法实现多个函数轮流执行
2016-12-12 15:49
375 查看
最近在看锋利的jQuery一书,发现不能像书中所说用toggle方法来实现点击轮流执行多个函数。
查了一下发现jQuery1.9版本之后删除了toggle上述功能,只保留了隐藏的功能。个人觉得很不理解,这么好的一个功能咋说没就没了呢,于是便想何不自己来实现,写一个myToggle呢?
首先说一下myToggle函数:被一个jquery对象实例调用,可以接收多个函数做参数,当每次点击该实例对象时,轮流执行参数中的函数;
下面是源码:
使用示例
代码很简单也很好理解,通过给jquery原型对象增加myToggle方法,所有的jquery对象都能调用该方法。判断参数类数组arguments中的参数是否是函数来选择是否要执行。并通过i%n来循环选择参数。
然后就是注意的地方,首先要用args来保存arguments,因为接下来要进入click内部的函数,不保存的话arguments就是那个匿名函数的参数类数组了,而且要确保调用func的对象是我们所设置的对象,所以使用func.call(that)来调用func函数,这里不用this涉及到闭包的知识,此时this是widow对象。
最后一点是该函数还存在一个问题,传入的func参数在执行时是异步的,这就有个问题,click不会等到func函数执行完才接着执行。如果func函数内部本来是return false想让一个链接不发生跳转,则这个return false没来的及返回click函数就有可能已经让该链接跳转了。所以我在click尾部增加了return false。
查了一下发现jQuery1.9版本之后删除了toggle上述功能,只保留了隐藏的功能。个人觉得很不理解,这么好的一个功能咋说没就没了呢,于是便想何不自己来实现,写一个myToggle呢?
首先说一下myToggle函数:被一个jquery对象实例调用,可以接收多个函数做参数,当每次点击该实例对象时,轮流执行参数中的函数;
下面是源码:
$.prototype["myToggle"] = function () { var args = arguments; var that = this; var i = 0; var n = args.length; this.click(function () { var func = args[i%n]; if (typeof func === 'function') { func.call(that); } i += 1; return false; }); };
使用示例
<button id='btn'></button>
$('#btn').myToggle(func1, func2)
代码很简单也很好理解,通过给jquery原型对象增加myToggle方法,所有的jquery对象都能调用该方法。判断参数类数组arguments中的参数是否是函数来选择是否要执行。并通过i%n来循环选择参数。
然后就是注意的地方,首先要用args来保存arguments,因为接下来要进入click内部的函数,不保存的话arguments就是那个匿名函数的参数类数组了,而且要确保调用func的对象是我们所设置的对象,所以使用func.call(that)来调用func函数,这里不用this涉及到闭包的知识,此时this是widow对象。
最后一点是该函数还存在一个问题,传入的func参数在执行时是异步的,这就有个问题,click不会等到func函数执行完才接着执行。如果func函数内部本来是return false想让一个链接不发生跳转,则这个return false没来的及返回click函数就有可能已经让该链接跳转了。所以我在click尾部增加了return false。
相关文章推荐
- jQuery常见操作实现和常用函数方法总结
- jquery 点击函数切换 toggle() 及其其他实现点击切换
- 关于jquery中jQuery slideToggle() 方法实现的原理
- 操他妈的,jquery1.4以上不能用toggle()轮流切换函数
- 实现自己的(模仿jquery)toggle函数
- 【jQuery】调用toggle()方法实现动画切换效果
- jQuery基于函数重载实现自定义Alert函数样式的方法
- jquery trigger函数执行两次的解决方法
- js自执行函数及参照jquery调用方法方式
- javascript实现根据函数名称字符串动态执行函数的方法示例
- javasciprt下jquery函数$.post执行无响应的解决方法
- jQuery+ajax实现动态执行脚本的方法
- 1.实现jquery的toggle()的代替方法:
- javascript封装addLoadEvent实现页面同时加载执行多个函数的方法
- jQuery 常见操作实现方式和常用函数方法总结
- Jquery中使用setInterval和setTimeout 实现定时执行函数
- 用简洁的jQuery方法toggleClass实现隔行换色
- 用简洁的jQuery方法toggleClass实现隔行换色
- Jquery源码解析---利用队列来实现函数的顺序执行
- Python函数的周期性执行实现方法