2017-11-19 1 views
1

Wirklich einfache Frage hier, tötet mich zu fragen. Ich kann es einfach nicht reparieren.jQuery - Button klicken funktioniert nicht

In einem Ajax-Aufruf möchte ich eine Liste von Elementen anzeigen. Jeder Gegenstand wird einen Knopf haben.

Also habe ich dieses div in meinem HTML:

<div id="calendar"> 
    <div id="activity_wrapper"> 
    <h4 class="activity-name"></h4> 
    <p class="activity_start"></p> 
    <p class="activity_end"></p> 
    <a class="start" id="start">Start Activity</a> 
    <a class="finish">Complete Activity</a> 
    <button id="delete-activity-button" class="delete" value="">Delete</button> 
    <button id="modify-activity-button" class="modify" value="">Edit</button> 
    </div> 
</div> 

Jetzt in jQuery mit Ajax erstelle ich die Liste wie folgt:

$.each(data, function (index, activity) { 
    var newActivity = activityDiv.clone(); 
    var startTime = new Date(activity.startDateTime); 
    var endTime = new Date(activity.endDateTime); 

    newActivity.find(".activity-name").text(activity.name); 
    newActivity.find(".activity_start").text(startTime); 
    newActivity.find(".activity_end").text(endTime); 
    newActivity.find(".delete").val(activity.id); 
    calendar.append(newActivity); 
}); 

Dann endlich habe ich diese Onclick:

$('.delete').click(function(e) { 
    var selected = $(this).attr('class') || $(this).attr('id'); 
    var id = selected.val(); 
    alert(id); 
}); 

Der Klick wird nicht registriert. Was mache ich falsch? Ich glaube, es liegt an der Art, wie ich die Aktivitätsklasse klone.

Danke.

+0

Versuchen Sie, die '$ Entfernen (this) .attr ('Klasse')' Ich vermute, Sie sind eine Klasse bekommen und das muss kein 'value' nicht wahr? – Forbs

+0

Wie hat eine Zeichenfolge eine val() -Methode? Sollte einen großen Fehler in der Konsole haben, wenn das Klickereignis tatsächlich an das Element angehängt ist. – epascarello

+0

sollten Sie das Element selbst klonen var newActivity = activity.clone(); – samehanwar

Antwort

0

Sie sollten clone() nicht für Elemente verwenden, die IDs enthalten, da IDs eindeutig sein sollten. Außerdem versucht Ihr Click-Handler, mit der ID zu arbeiten, die aufgrund der mehreren identischen IDs ein inkonsistentes Verhalten aufweist.

Clone() klont auch nicht die Ereignisse, die Sie an Ihre anfängliche div angehängt haben (es sei denn, Sie übergeben es 'true'), so dass Ihr Click-Handler nicht ausgelöst wird, abhängig davon, wann Sie angehängt haben es. Es wäre besser, Ihre Click-Handler an die Mutter anbringt:

$('#calendar').on('click', '.delete', function(e) { ... }); 

so sorgen Sie sich nicht um auf jede Aktivität das Ereignis zu klonen.

0

Ich habe keinen Fehler in Ihrem Code gefunden, aber Sie können das "Ein" versuchen, anstatt zu klicken. Bitte lassen Sie mich wissen, wenn es nicht funktioniert.

Hauptsächlich "Ein" -Ereignis wird für dynamische DOM-Objekte verwendet.

http://dotnet-helpers.com/jquery/

Verwandte Themen