Das Problem ist, dass box
in eine Zeichenfolge konvertiert wird, wenn Sie solche Elemente erstellen. Zum Beispiel:
var box = {
x: 10,
y: 10,
w: 5,
h: 3
};
console.log('onclick="showBoxMarker(' + box + ')"');
Offensichtlich showBoxMarker([object Object])
Aufruf ist nicht gültig Syntax. Stattdessen sollten Sie die Elemente separat erstellen und dann einen Ereignishandler an dieses Element anhängen.
box_resources.forEach(function(box){
var $listItem = $('<li><button type="button" class="list-group-item">' + box.title + '</button></li>');
// Find the button we just made and attach the click handler
$listItem.find('button').click(function() {
showBoxMarker(box);
});
$('#box-resources-list').append($listItem);
});
Arbeitsbeispiel:
var showBoxMarker = function(box) {
alert(box.title);
}
var box_resources = [
{ title: 'Box A' },
{ title: 'Box B' },
{ title: 'Box C' },
{ title: 'Box D' },
{ title: 'Box E' }
];
box_resources.forEach(function(box){
var $listItem = $('<li><button type="button" class="list-group-item">' + box.title + '</button></li>');
// Find the button we just made and attach the click handler
$listItem.find('button').click(function() {
showBoxMarker(box);
});
$('#box-resources-list').append($listItem);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul id="box-resources-list"></ul>
Pro-Tipp: In der Regel ist es besser, neue Elemente aus einer Art von Vorlage zu erstellen, anstatt von Strings in JS und erstellen eine Klicken Sie auf den Handler für ein übergeordnetes Element, und verwenden Sie die Ereignisdelegierung, um Klickereignisse für einzelne Elemente zu verarbeiten.
Gleichgültig den vorherigen Kommentar. Ich habe etwas falsch von meiner Seite. Danke für die Hilfe! Es funktioniert perfekt. Der Pro-Tip hilft sehr. Es wäre ein guter Tipp in meiner zukünftigen Entwicklung zu erinnern. Vielen Dank! – zxue