Das Jquery-Klickereignis funktioniert nach der Append-Methode nicht
Lesezeit: 5 Minuten
Eduard
Also habe ich diese Schaltfläche, die der Tabelle eine neue Zeile hinzufügt, aber mein Problem ist, dass sie nicht auf die hört .new_participant_form Click-Ereignis nicht mehr, nachdem die Append-Methode stattgefunden hat.
Das Problem ist, dass das Ereignis nur an die angehängt ist new_participant_form Element, das bereits im Dokument vorhanden ist. Damit es auch für Elemente funktioniert, die Sie später hinzufügen, können Sie die Ereignisdelegierung verwenden, wie dystroy demonstriert hat, oder den Handler an jeden Anker anhängen, bevor Sie ihn einfügen (ersteres ist effizienter).
Damit der Klick an ein beliebiges Element in delegiert wird #registered_participants Klasse haben new_participant_formauch wenn es hinzugefügt wird, nachdem Sie den Ereignishandler gebunden haben.
Gibt es einen Nachteil in Bezug auf die Leistung, wenn Sie verwenden $(document).on('click', '.new_participant_form', function() {}); ?
– basZero
19. Dezember 13 um 16:25 Uhr
@basZero Es gibt einen, da jQuery dann alle Klicks verarbeiten müsste und nicht nur den einen auf den #registered_participants Aber um fair zu sein, ist diese Verlangsamung so gering, dass sie irrelevant ist. Es ist meistens besser, auf das richtige Element zu zielen, weil es sauberer ist.
– Denys Séguret
19. Dezember 13 um 16:28 Uhr
Kann ich für ein neu angehängtes Element denselben Klassennamen verwenden?
– Steven Dang
15. Januar 21 um 4:02 Uhr
Roko C. Buljan
Der .on() Methode wird verwendet, um Ereignisse an Elemente zu delegieren, die dynamisch hinzugefügt wurden oder bereits im DOM vorhanden sind:
// STATIC-PARENT on EVENT DYNAMIC-CHILD
$('#registered_participants').on('click', '.new_participant_form', function() {
var $td = $(this).closest('tr').find('td');
var part_name = $td.eq(1).text();
console.log( part_name );
});
$('#add_new_participant').click(function() {
var first_name = $.trim( $('#f_name_participant').val() );
var last_name = $.trim( $('#l_name_participant').val() );
var role = $('#new_participant_role').val();
var email = $('#email_participant').val();
if(!first_name && !last_name) return;
$('#registered_participants').append('<tr><td><a href="#" class="new_participant_form">Participant Registration</a></td><td>' + first_name + ' ' + last_name + '</td><td>' + role + '</td><td>0% done</td></tr>');
});
Ab jQuery 3.0 ist .delegate() veraltet. Sie wurde seit jQuery 1.7 durch die .on()-Methode ersetzt, sodass von ihrer Verwendung bereits abgeraten wurde. Für frühere Versionen bleibt dies jedoch das effektivste Mittel zur Verwendung der Ereignisdelegierung. Weitere Informationen zur Ereignisbindung und -delegierung finden Sie in der Methode .on(). Im Allgemeinen sind dies die äquivalenten Vorlagen für die beiden Methoden:
** Hier ist die Lösung, die Ihnen helfen könnte **
// Changed to delegate() method to use delegation from the body
$("body").delegate("#boundOnPageLoaded", "click", function(){
alert("Delegated Button Clicked")
});
Die Methode „delegate()“ ist in Version 3.0 veraltet. Verwenden Sie also stattdessen die Methode on().
– Manoj
14. Oktober 20 um 10:35 Uhr
$(document).on("click", '.mylink', function(event) {
alert("new link clicked!");});
Die Methode „delegate()“ ist in Version 3.0 veraltet. Verwenden Sie also stattdessen die Methode on().
– Manoj
14. Oktober 20 um 10:35 Uhr
.
7583900cookie-checkDas Jquery-Klickereignis funktioniert nach der Append-Methode nichtyes
Das Problem ist, dass das Ereignis nur an die angehängt ist
new_participant_form
Element, das bereits im Dokument vorhanden ist. Damit es auch für Elemente funktioniert, die Sie später hinzufügen, können Sie die Ereignisdelegierung verwenden, wie dystroy demonstriert hat, oder den Handler an jeden Anker anhängen, bevor Sie ihn einfügen (ersteres ist effizienter).– Asad Saeeduddin
14. März 13 um 21:34 Uhr