我需要暂时更改元素的click事件,如下所示:
var originalEvent = '';
$("#helpMode").click(function (e) {
originalEvent = $("#element").getCurrentClickEventHandler();
$("#element").click(function (e) {
//Do something else
});
});
//Later in the code
$("#helpModeOff").click(function (e) {
$("#element").click(originalEvent);
});
如何将当前函数作为事件处理程序存储在全局变量中以供以后重用?
编辑:这是我想要做的事情:
var evnt = '';
$("#helpTool").click(function (e) {
if(!this.isOn){
evnt = $("#Browse").data('events').click;
$("#ele").unbind('click');
$("#ele").click(function (e) {
alert('dd');
});
this.isOn=true;
}else{
this.isOn = false;
alert('off');
$("#ele").unblind('click');
$("#ele").click(evnt);
}
});
答案 0 :(得分:0)
你走了,想通了:
现在使用e.srcElement.id,您可以获得HelpMode或HelpModeOff,然后可以打开/关闭您的帮助内容!
var originalEvent = '';
$('#element').on('yourCustomEvent', function (e) {
// do stuff
alert(originalEvent);
$(this).toggleClass('toggleThing');
//test for helpMode or helpModeOff here now...
});
$("#helpMode").on('click', function (e) {
originalEvent = e.srcElement.id;
$("#element").trigger('yourCustomEvent');
});
//Later in the code
$("#helpModeOff").on('click', function (e) {
originalEvent = e.srcElement.id;
$("#element").trigger('yourCustomEvent');
});
答案 1 :(得分:0)
好。在jQuery 1.7中我猜它有点不同。
//get the handler from data('events')
$.each($("#element").data("events"), function(i, event) {
if (i === "click") {
$.each(event, function(j, h) {
alert(h.handler);
});
}
});
This是参考。
不确定以下是否适用于1.7。
originalEvent = $('#element').data('events').click;
jQuery将所有处理程序存储在data
中。有关data('events')
的详细信息,请参阅here。
答案 2 :(得分:0)
就个人而言,我认为我会避免手动绑定和取消绑定处理程序。
另一种解决方法是将click事件绑定到类,然后您需要做的就是在切换到/从帮助模式时添加和删除相应元素中的类。
这是jsfiddle说明我的意思。
切换到帮助模式,然后只需添加删除类:
$('#btnhelpmode').click(function(){
if(!helpMode){
helpMode = true;
$('.normalmode').addClass('helpmode').removeClass('normalmode');
$(this).val('Switch to normal mode...');
}else{
helpMode = false;
$('.helpmode').addClass('normalmode').removeClass('helpmode');
$(this).val('Switch to help mode...');
}
});
您只需创建所需的处理程序,将它们绑定到相应的类:
$('#pagecontent').on('click', '#element1.normalmode', function(){
alert('element1 normal mode');
});
$('#pagecontent').on('click', '#element1.helpmode', function(){
alert('element1 help mode');
});
$('#pagecontent').on('click', '#element2.normalmode', function(){
alert('element2 normal mode');
});
$('#pagecontent').on('click', '#element2.helpmode', function(){
alert('element2 help mode');
});