保留当前单击事件jquery

时间:2012-07-24 19:08:55

标签: javascript jquery web-applications mobile

我需要暂时更改元素的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);
}
});

3 个答案:

答案 0 :(得分:0)

你走了,想通了:

现在使用e.srcElement.id,您可以获得HelpMode或HelpModeOff,然后可以打开/关闭您的帮助内容!

http://jsfiddle.net/zcDQ9/1/

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);
        });
    }   
});

http://jsfiddle.net/yQwZU/

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'); 
});