3

onclick イベントで関数にオブジェクトを渡そうとしています。以下のコードを実行すると、Uncaught SyntaxError: Unexpected indentifier. 行のコメントを外して代わりにJSON.stringify使用すると、同じエラーが発生します。taskAsJsontask

$.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 とリストビューを更新するために使用される配列です。

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

2 に答える 2

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 に入れるのは一般的に悪いことです。

于 2013-09-29T22:17:59.660 に答える