“Esperado]” error mientras pasa un objeto como parámetro a la función js
-
21-09-2019 - |
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.
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);