过去自己常用jQuery.fn.toggle(fn1,fn2)来处理click事件的两种状态,例如click一次做一个动作,再click一次则回复原来的动作,只要把两个动作处理的function handler指定给toggle当前、后两个参数即可。
但是由于jQuery中,有两个名称一样,但作用不同的toggle,一个就是前面描述的,另一个则是用来显示/隐藏元素。在jQuery 1.8中,前面描述的功能已经列入不建议使用,而1.9更是移除掉,只保留用来显示/隐藏元素的机制。
因此只要使用jQuery 1.9,有用上toggle(fn1,fn2)的都会失效。除非用上 jQuery Migrate plugin或者官方建议从原始码找出原来的作法,抽出来独立使用。
其实原本提供的toggle(fn1,fn2)直观又好用,移除实在太可惜了,刚好在stackoverflow看到一段替代办法,转过来分享给大家。
$.fn.toggleClick = function(){ var functions = arguments ; return this.click(function(){ var iteration = $(this).data('iteration') || 0; functions[iteration].apply(this, arguments); iteration = (iteration + 1) % functions.length ; $(this).data('iteration', iteration); });};
上面的程式码已经整理成jQuery plugin, 所以只要依一般jQuery的外挂使用方法即可。
程式码的出处在此:http://stackoverflow.com/questions/14338078/equivalent-of-deprecated-jquery-toggle-event