2017-02-21 20 views
-1

Ich habe ein Ereignis für Click-and-Hold auf einem dynamischen ElementJQuery erhalten Element in einer setTimer Funktion

var timeoutId = 0; 
    $(document).on('mousedown', '.createbtn', function(){ 
     timeoutId = setTimeout(showNewInfoCreateDlg, 1000); 
    }).on('mouseup mouseleave', '.createbtn', function() { 
     clearTimeout(timeoutId); 
    }); 

und die Funktion "showNewInfoCreateDlg" ich wissen muss, was die ID des Elements dass angeklickt wurde-und-gehalten

function showNewInfoCreateDlg(){ 
     alert($(this).attr('id')); 
    } 

die Funktion der Benachrichtigung "undefiniert"

Hier ist die jsfiddle für mein Problem:

JsFiddle

+0

http://stackoverflow.com/questions/2130241/pass-correct-this-context-to-settimeout-callback –

Antwort

1

Explizit bindet es an die Funktion:

var timeoutId = 0; 
$(document).on('mousedown', '.createbtn', function(){ 
    timeoutId = setTimeout(showNewInfoCreateDlg.bind(this), 1000); 
}).on('mouseup mouseleave', '.createbtn', function() { 
    clearTimeout(timeoutId); 
}); 

Zur Klarstellung: Die bind() Funktion wird, gut, den Wert seines ersten Arguments der this Variable innerhalb showNewInfoCreateDlg binden. Dies wird explizite Bindung genannt.

+0

Großartig. Danke – user1137313

+0

Gern geschehen :) – AVAVT

Verwandte Themen