Ошибка «Ожидается]» при передаче объекта в качестве параметра в функцию js - PullRequest
0 голосов
/ 24 декабря 2009

Я пытаюсь передать объект в качестве параметра функции javascript как:

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

В приведенных выше js event и view являются объектами из календаря jquery Full Calendar, которые я передаю для вызова функции js.

Выдает ошибку, Expected ']'. В чем может быть проблема или как передать объект, как указано выше?

Показывает "javascript:ShowEditEventDetails([object Object],1,'Name',[object Object])", глядя в firebug.

Ответы [ 3 ]

3 голосов
/ 24 декабря 2009

Вы не можете передать объект таким способом, потому что при объединении строки HTML вашего элемента span все операнды оператора + преобразуются toString, включая объект event, вот почему вы получаете "[object Object]":

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

Я бы порекомендовал вам связать событие click программно:

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

$('#otherElement').append($span);
// ...
0 голосов
/ 24 декабря 2009

Что происходит не так

event и view - оба объекта. Когда вы объединяете объект в строку (как вы делаете с '...ShowEventDetails(' + event + ','...), JavaScript преобразует объект в строку, что приводит к почти бесполезному [object Object] тексту, который вы видите в FireBug. Когда интерпретатор JavaScript позже пытается проанализировать [object Object] как код, он взрывается, потому что это неверный синтаксис.

Как это исправить

Самое простое, что нужно сделать, это установить обработчик событий программно:

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

parentElement.append(mySpan);
0 голосов
/ 24 декабря 2009

Это потому, что ShowEventDetails не передается event, оно передается String(event), то есть [object Object], что дает синтаксическую ошибку Предполагая, что event и view являются глобальными переменными, используйте вместо этого:

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

Вы не должны использовать .html для такой вещи. Это решение лучше и не требует глобальных переменных:

.addClass("link")
.click(function () {
  ShowEventDetails(event, event.Id, event.Name, view)
})
.text(event.title);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...