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

时间:2013-09-18 15:37:40

标签: jquery

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

    $("#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.    
    });

在单击上面的一个方法之前,click事件附加到元素#file但是在单击一个方法后,它使用下面的代码显示click事件是unbind

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

2 个答案:

答案 0 :(得分: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. 
}

答案 1 :(得分:0)

这对我来说似乎有点多余,只需要点击一下就可以使用.one方法。在事件运行完代码后重新绑定click事件,只需使用.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);