2009-12-24 5 views
0

Я пытаюсь передать объект в качестве параметра в яваскрипте функции как:«Ожидаемый]» ошибка при передаче объекта в качестве параметра JS функций

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

+0

Если вы используете ASP.NET, вы также могли бы получить ошибку из Функция ShowEventDetails. Я не знаю, что это всего лишь отладочная вещь в Visual Studio 2008 с пакетом обновления 1 (SP1), но я потратил около часа на поиск очень похожей проблемы. –

+0

он просто выдает ошибку при загрузке страницы. т. е. при построении самого html. Также он не попадает в эту функцию при использовании отладчика. – Prasad

+0

Попробуйте в Firefox с отладчиком Firebug и посмотрите, не поняли ли вы. Посмотрите на консоль на интересные сообщения об ошибках. –

ответ

3

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

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

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

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

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

работал отлично, спасибо CMS – Prasad

0

это потому, что 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); 
0

Что Going Wrong

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

 Смежные вопросы

  • Нет связанных вопросов^_^