将对象作为参数传递给js函数时出现“Expected]”错误

时间:2009-12-24 04:04:43

标签: javascript jquery fullcalendar

我正在尝试将对象作为参数传递给javascript函数:

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

在上面的js中,eventview是来自jquery日历Full Calendar的对象,我将其传递给js函数。

它会抛出错误Expected ']'。可能有问题或如何传递上述对象?

在查看萤火虫时显示"javascript:ShowEditEventDetails([object Object],1,'Name',[object Object])"

3 个答案:

答案 0 :(得分:3)

您无法以这种方式传递对象,因为当您连接span元素的HTML字符串时,+运算符的所有操作数都将转换为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);
// ...

答案 1 :(得分:0)

这是因为ShowEventDetails未被传递event,而是传递String(event),即[object Object],这会产生语法错误。假设eventview是全局变量,请改用:

.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);

答案 2 :(得分:0)

有什么不对

eventview都是对象。当您将对象连接到字符串时(就像您使用'...ShowEventDetails(' + event + ','...一样),JavaScript会将对象强制转换为字符串,从而导致您在FireBug中看到几乎无用的[object Object]文本。当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);