0

使用一种方法后如何重新绑定点击事件?

    $("#file").one("click", function(event)
    {   
     // code works only one time as expected.
     $(this).bind("click") // attempting to rebind it again after executing code but not binding again tested below.    
    });

在单击上面的一种方法之前,单击事件已附加到元素#file 但单击一种方法后,它显示单击事件已使用以下代码取消绑定

    $(".viewAttachedEvents").click(function()
    {
    var eventFile = $._data(document.getElementById("file"),"events");      
    var File = JSON.stringify(eventFile);
    alert("eventFile: "+File+");
     });
4

2 回答 2

0

我刚刚对此进行了测试,它似乎可以工作,尽管它看起来相当不优雅。

$("#file").one("click", function(event)
{   
     setTimeout(function(){
        jQuery('#file').click(function(){console.log('bound again')}); 
     },2000); 
});

编辑:

这似乎也有效 - 我相信有一种更清洁的方法:

$("#file").one("click", function(){   
     //do something
     rebindMe.call($(this));
   });

var rebindMe = function(){
    setTimeout(function(){
        $(this).one('click', function(){
        //do something
        rebindMe($(this));
    }); 
 },4000); // set to 4 seconds. can change it. 
}
于 2013-09-18T16:18:50.513 回答
0

这对我来说似乎有点多余,.one当您只想单击时使用该方法。在事件完成运行其代码后重新绑定单击事件会更简单,只需使用.on和进行一点抽象.off

var bindTo = $(document),
    clickEvent = function(event) 
    {
        // Unbind event
        bindTo.off('click', '#file', clickEvent);

        // Run your event logic

        // Rebind the event
        bindTo.on('click', '#file', clickEvent);
    };

bindTo.on('click', '#file', clickEvent);
于 2013-09-18T16:24:18.130 回答