Вы забыли кавычки вокруг названия.
$.each(json, function(i, item) {
template += '<p><a href="javascript:void(0)" onClick="formatDescrip(' + i + ',\"' + json[i].title + '\")">' + this.title + '</a></p>';
});
Однако, вместо того, чтобы настраивать обработчики, почему бы не использовать jQuery ".delegate ()"?
$.each(json, function(i, item) {
template += '<p><a class="dynamic" data-index="' + i + '" href="#">' + this.title + '</a></p>';
});
containerList.delegate("a.dynamic", "click", function(ev) {
formatDescrip($(this).data('index'), $(this).text());
});
Или что-то в этом роде; если список расширяется несколько раз, то вызов .delegate (), вероятно, следует выполнить один раз, вне обработчика.
edit & mdash; если функции "formatDescrip ()" требуется доступ к исходному объекту "события" (какими бы ни были те вещи, которые вы используете для составления списка тегов <a>
), вы можете передать его в "formatDescrip ()" вместо индекс, а затем измените другую функцию при необходимости:
containerList.delegate("a.dynamic", "click", function(ev) {
formatDescrip( json[$(this).data('index')] );
});
// ...
function formatDescrip(eventObj) {
alert(eventObj.title);
//
// ... more code here ...
//
}