Хотя я нахожу специфику того, что вы делаете, немного странной, я попытался найти более стабильный способ добиться этого. Кажется вероятным, что непоследовательное поведение, которое вы наблюдаете, связано с проблемами времени. «Alert», «debug steping» и «setTimout» взламывают все точки в этом направлении.
Сначала несколько отзывов о вашем коде
totaltracks = data.length;
j=0;
// I preferably use $.each() in these type of situations.
// See http://api.jquery.com/jQuery.each/
while(j<totaltracks){
newtrack =data[j];
myPlaylist.add(newtrack);
// Here you select the same DOM elements for every loop of the while statement.
// This is a performance issue.
tracks = $("a.jp-playlist-item");
// Here you select the those DOM elements once again,
// then you assign the j:th element to the curtrack variable.
// This doubles the performance issue.
curtrack = $("a.jp-playlist-item")[j];
$(curtrack).attr({rel:j});
j++;
}
Я верю, что эти проблемы с производительностью могут быть причиной ваших проблем.
Во-вторых, мое предложение
// Select the DOM elements only once.
var trackElements = $("a.jp-playlist-item"),
trackData = [
{title: 'Stuck in a groove', artist: 'Puretone'},
{title: 'Addicted To Bass', artist: 'Puretone'},
{title: 'Hypersensitive', artist: 'Puretone'}
];
$.each(trackData, function(index, newTrack){
myPlaylist.add(newTrack);
$(trackElements[index]).attr("rel", index);
});
В-третьих, полный пример
Я создал эту скрипку , чтобы вы могли поиграть с ней. Это демонстрирует мое предложение в более полной форме. Надеюсь, это указывает на правильное направление.