0

1つの方法を使用した後にクリックイベントの再バインドを取得するには?

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

上記の1つのメソッドをクリックする前に、クリックイベントが要素#fileに添付されていますが、1つのメソッドをクリックした後、以下のコードを使用してクリックイベントがアンバインドされていることを示しています

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

2 に答える 2

0

これは私には少し冗長に思え.oneます。ワンクリックだけが必要な場合は、この方法を使用してください。イベントがそのコードの実行を終了した後にクリック イベントを再バインドすることは、 and を使用して少し抽象化するだけで、より簡単に.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 に答える
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 に答える