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.

Était-ce utile?

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);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top