« Attendu] » erreur lors du passage d'un objet en tant que paramètre de fonction js
-
21-09-2019 - |
Question
Je suis en train de passer un objet en tant que paramètre à la fonction javascript comme:
.html('<span class="link" onclick="javascript:ShowEventDetails(' + event + ','
+ event.Id + ',' + event.Name + ',' + view + ')">' + event.title
+ '</span>')
Dans les js ci-dessus, la event
et view
sont des objets du calendrier jquery Full Calendar
, qui je passe à appeler une fonction js.
Il renvoie une erreur, Expected ']'
. Ce qui peut être un problème ou comment passer d'un objet comme ci-dessus?
Il montre "javascript:ShowEditEventDetails([object Object],1,'Name',[object Object])"
tout en regardant dans Firebug.
La solution
Vous ne pouvez pas passer un objet de cette façon, parce que quand vous concaténer la chaîne HTML de votre élément span
, tous les opérandes de l'opérateur +
sont convertis toString
, y compris l'objet event
, c'est pourquoi vous obtenez "[object Object]"
:
'' + {} == "[object Object]"; // an empty object
Je vous recommande de lier le programme événement click:
// ...
var $span = $('<span class="link">' + event.title + '</span>');
$span.click(function () {
ShowEventDetails(event, event.Id, event.Name, view);
});
$('#otherElement').append($span);
// ...
Autres conseils
C'est parce que ShowEventDetails
n'est pas passé event
, il est passé d'être String(event)
, qui est [object Object]
, ce qui donne une erreur de syntaxe. En supposant event
et view
sont des variables globales, utilisez ceci:
.html('<span class="link" onclick="javascript:ShowEventDetails(event,'
+ event.Id + ',' + event.Name + ',view)">' + event.title
+ '</span>')
Vous ne devriez pas utiliser .html pour une telle chose cependant. Cette solution est préférable et ne nécessite pas des variables globales:
.addClass("link")
.click(function () {
ShowEventDetails(event, event.Id, event.Name, view)
})
.text(event.title);
Qu'est-ce qui ne va pas
event
et view
sont les deux objets. Lorsque vous concaténer un objet à une chaîne (comme vous faites avec '...ShowEventDetails(' + event + ','...
), JavaScript jette l'objet à une chaîne, ce qui dans le texte de [object Object]
presque inutile que vous voyez dans Firebug. Lorsque l'interpréteur JavaScript tente ensuite d'analyser [object Object]
code, il explose parce qu'il est une syntaxe incorrecte.
Comment Fix It
La meilleure chose à faire est de définir votre gestionnaire d'événements programme:
var mySpan = $('<span class="link" />');
mySpan.text(event.title);
mySpan.click(function (ev) {
ShowEventDetails(event, event.Id, event.Name, view);
});
parentElement.append(mySpan);