2016-11-25 4 views
-6

ich diesen Code verwenden für den Klick auf einem Button in meiner Seite Handhabung:

$(document).on("click", $('#' + GlobalVariables.currentUserType).find(".addDocumentToSection"), function (e) { 
     addItemToDocumentGrid(); 
     $('#removeDocumentFromSection').disable(true).addClass("disabled"); 
     $('#removeSelection').disable(true).addClass("disabled"); 
}); 

Aber das Ereignis ausgelöst wird als Sobald ich irgendwo auf die Seite klicke. Auch wenn es nicht die vermeintliche Taste ist, die ich mit $('#' + GlobalVariables.currentUserType).find(".addDocumentToSection") auswählen möchte.

$('#' + GlobalVariables.currentUserType).find(".addDocumentToSection") gibt ein Element zurück, das eigentlich die Schaltfläche ist, die ich auswählen möchte.

Warum verhält es sich so?

Antwort

0

Sie verknüpfen onClick-Ereignis mit einem document-Element. Versuchen:

var button = $('#' + GlobalVariables.currentUserType).find(".addDocumentToSection"); 
button.on("click", function() { 
    addItemToDocumentGrid(); 
    $('#removeDocumentFromSection').disable(true).addClass("disabled"); 
    $('#removeSelection').disable(true).addClass("disabled"); 
}); 
+0

Die downvotes auf diese scheinen hart. Wir wissen nicht, dass das OP die Ereignisdelegierung verwenden möchte, und das OP sagt, dass der Selektor das relevante Element findet; vorausgesetzt, dies sagt sowohl was falsch ist und wie es zu beheben ist. –

+0

Upvoted, um auszugleichen: da '$(). Find()' funktioniert, ist es vernünftig, dass keine Ereignisdelegierung erforderlich ist, um diese Antwort zu geben. –

7

Wenn Sie Ereignis Delegation verwenden möchten, sollte das zweite Argument ein Selektor sein, nicht ein jQuery-Objekt.

$(document).on("click", '#' + GlobalVariables.currentUserType + " .addDocumentToSection", function (e) { 
// ---------------------^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
     addItemToDocumentGrid(); 
     $('#removeDocumentFromSection').disable(true).addClass("disabled"); 
     $('#removeSelection').disable(true).addClass("disabled"); 
}); 

Wenn Sie keine Veranstaltung Delegation verwenden möchten, müssen Sie on auf das Element rufen Sie auf das Ereignis Haken:

$('#' + GlobalVariables.currentUserType).find(".addDocumentToSection").on("click", function (e) { 
     addItemToDocumentGrid(); 
     $('#removeDocumentFromSection').disable(true).addClass("disabled"); 
     $('#removeSelection').disable(true).addClass("disabled"); 
}); 

Das alles in the on documentation bedeckt ist.

+0

4 Stimmen nach 30s. Wählen ohne zu lesen? –

+2

@ TânNguyễn: Oder Leute lesen schnell. Dauert nicht länger als 10-15 Sekunden, wenn das, um das oben zu lesen, wenn Sie mit den Konzepten vertraut sind. –

+0

@ TânNguyễn auch so wahrscheinlich: Menschen lesen die Frage, die offensichtliche Antwort zu sehen, gehen Sie, um Antwort hinzuzufügen, erhalten Benachrichtigung, dass eine Antwort hinzugefügt wurde, sehen, dass es genau das ist, was sie setzen würde, upvote anstatt ein Duplikat hinzuzufügen –

-1
$('#' + GlobalVariables.currentUserType).find(".addDocumentToSection").on("click", function(e){ 

}); 

jQuery Selektoren vor dem .on("click" verwenden können, sollte dies für Sie arbeiten.