Pregunta

Estoy tratando de pasar un objeto como parámetro a la función de JavaScript como:

    .html('<span class="link" onclick="javascript:ShowEventDetails(' + event + ',' 
    + event.Id + ',' + event.Name + ',' + view + ')">' + event.title 
+ '</span>')

En los js anteriores, el event y view son objetos de la Full Calendar calendario jquery, que estoy pasando a llamar a una función js.

Se genera un error, Expected ']'. Lo que puede ser un problema o cómo pasar un objeto que el anterior?

Muestra "javascript:ShowEditEventDetails([object Object],1,'Name',[object Object])" mientras se mira en Firebug.

¿Fue útil?

Solución

No se puede pasar un objeto de esa manera, porque al concatenar la cadena HTML de su elemento span, todos los operandos del operador + son toString convertido, incluyendo el objeto event, por eso se obtiene "[object Object]":

'' + {} == "[object Object]"; // an empty object

Yo le recomendaría para unir el evento de clic mediante programación:

// ...
var $span = $('<span class="link">' + event.title + '</span>');
$span.click(function () {
  ShowEventDetails(event, event.Id, event.Name, view);
});

$('#otherElement').append($span);
// ...

Otros consejos

Esto se debe a ShowEventDetails no se está pasando event, que está siendo pasada String(event), que es [object Object], lo que produce un error de sintaxis. Suponiendo event y view son variables globales, utilice en su lugar:

.html('<span class="link" onclick="javascript:ShowEventDetails(event,' 
      + event.Id + ',' + event.Name + ',view)">' + event.title 
      + '</span>')

No deberías estar usando html para que tal cosa sin embargo. Esta solución es mejor y no requiere variables globales:

.addClass("link")
.click(function () {
  ShowEventDetails(event, event.Id, event.Name, view)
})
.text(event.title);

lo que va mal

event y view son ambos objetos. Al concatenar un objeto a una cadena (como se está haciendo con '...ShowEventDetails(' + event + ','...), JavaScript arroja el objeto a una cadena, lo que resulta en el texto casi inútil [object Object] que se ve en FireBug. Cuando el intérprete de JavaScript más tarde intenta analizar [object Object] como código, se explota, ya que es una sintaxis no válida.

¿Cómo lo arreglo

La cosa más fácil de hacer es configurar el controlador de eventos mediante programación:

var mySpan = $('<span class="link" />');
mySpan.text(event.title);
mySpan.click(function (ev) {
  ShowEventDetails(event, event.Id, event.Name, view);
});

parentElement.append(mySpan);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top