我试图将对象传递给onclick事件中的函数。如果我运行下面的代码,我会得到Uncaught SyntaxError: Unexpected indentifier
。如果我取消注释JSON.stringify
行,并使用taskAsJson
代替task
,我会收到相同的错误。
$.each(tasks, function (index, task) {
//var taskAsJson = JSON.stringify(task);
items.push('<li><a href="#" onclick="showTask(' + task + ');">' + task.Description + '</a></li>');
});
但是,如果我对一个值进行硬编码,比如5,它就会工作,并且会将5个传递给函数。
$.each(tasks, function (index, task) {
items.push('<li><a href="#" onclick="showTask(' + 5 + ');">' + task.Description + '</a></li>');
});
为什么在尝试传递对象时出现错误?我需要更改哪些内容才能传递task
或taskAsJson
?
注意:items是一个用于更新div和listview的数组:
$('#appTasks').append(items).listview('refresh');
答案 0 :(得分:7)
HTML中的JavaScript很糟糕。 JavaScript中的HTML很糟糕。 JavaScript中的JavaScript中的JavaScript?你会遇到这样的问题。
使元素正确。
var items = $.map(tasks, function(task) {
return $('<li>').append(
$('<a>', {
href: '#',
text: task.Description,
click: function(e) {
e.preventDefault();
showTask(task);
}
})
);
});
答案 1 :(得分:3)
问题是showTask(' + task + ');
在JavaScript代码中缺少引号。例如,如果task
为“cars”,则创建的HTML将为onclick="showTask(cars)"
。现在“汽车”缺乏报价。此外,在您的示例中,task
可能甚至不是字符串而是对象,因此您正在寻找类似task.id
的内容来获取正确的参数。否则task
的字符串表示形式为[object Object]
。
当你硬编码5时它会起作用,因为5是一个不需要引号的数字值。 (onclick="showTask(5)"
有效)
因此,如果您将其更改为showTask(\'' + task + '\');
,那么它应该有效,因为转发的\'将在最终的HTML代码中导致onclick="showTask('valueOfTask')"
(至少如果task
是您的字符串希望参数)。但是,正如minitech指出的那样,将JS代码放入HTML中通常是不好的。