在jQuery1.8.0版本之前,我們要想獲取某個DOM綁定的事件處理程序可以這樣:
$.data(domObj,'events');//或者$('selector').data('events')
jQuery1.8.0版本開始,jQuery突然不支持這樣使用了,而是改到了一個叫'_data'的函數功能上了,即,1.8.0及以后的版本你可以這么用:
$._data(domObj,'events');//注意,這里不能像$('selector')._data('events')這樣用了。 /*例如可以寫成*/ $._data($('#box').get(0),'events') // 這里是獲取id為box的dom元素身上綁定的所有事件 $._data($('#box').get(0),'events')['click']// 這里是獲取id為box的dom元素身上綁定的click事件 /*或寫成*/ $._data($('#box').get(0)).events /*或還可以寫成*/ $.cache[$('#box').get(0)[$.expando]].events
兼容兼容各個jQuery版本的方式,這樣獲取即可:
var eventsData = $.data(domObj,'events') || $._data(domObj,'events');//這個改變在easyui 1.3.1的源碼中也有體現。
動態移除和恢復對象上的事件
var arr_cache= $._data($('#targetObject').get(0),'events')['click']; //緩存對象身上事件 $("#btn_clear").click(function(){ $._data($('#targetObject').get(0),'events')['click'] = undefined;//清除事件時候給對象身上事件賦值為undefined }); $("#btn_revert").click(function(){ $._data($('#targetObject').get(0),'events')['click'] = arr_cache;//恢復事件的時候給對象身上事件賦值為之前存好的緩存arr_cache });
利用Class動態添加或阻止對象上的事件
$('#domObj').click(function(){ if($(this).hasClass('off_fn')){return} //這里寫你的代碼 }) /*要動態添加或阻止某個元素上所加的事件可以在該元素的事件內添加“if($(this).hasClass('off_fn')){return}”到時候我們只要在該元素身上添加或移除“off_fn”class就可以實現我們想我的功能了。 */