在onclick中传递变量:Uncaught SyntaxError:意外的标识符

时间:2013-09-29 21:39:02

标签: javascript json

我试图将对象传递给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>');
});

为什么在尝试传递对象时出现错误?我需要更改哪些内容才能传递tasktaskAsJson

注意:items是一个用于更新div和listview的数组:

$('#appTasks').append(items).listview('refresh');

2 个答案:

答案 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中通常是不好的。