8

我正面临 Firefox 8.0.1 的奇怪行为:这段代码在 Google Chrome 和 IE 上运行良好,但在 Firefox 上它会失败,除非我在“调试模式_逐步”下运行它或者我放了一个在我设置属性“rel”的那一行之后发出警报...

// some stuff before
// this piece of code works fine excepts on FF
        totaltracks = data.length;
    j=0;
    while(j<totaltracks){
        newtrack =data[j];
        myPlaylist.add(newtrack);
        tracks = $("a.jp-playlist-item");
        curtrack =  $("a.jp-playlist-item")[j];
        $(curtrack).attr({rel:j});
        // I tried too : $("a.jp-playlist-item")[j].attr("rel",j); with same no effect on FF
        j++;            
    }    

如果没有一步一步地完成,FF似乎只是不关心指令(或跳过它)...... 2天过去了,面对这堵墙......任何帮助/线索/技巧将不胜感激

4

3 回答 3

1

尽管我发现您正在做的事情的细节有点奇怪,但我试图找到一种更稳定的方法来完成它。您看到的不一致行为似乎是由于时间问题造成的。“alert”、“debug stepping”和“setTimout”hacks 都指向这个方向。

首先,对您的代码的一些反馈

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);
});

三、完整示例

我创造了这个小提琴供你玩耍。它以更完整的方式展示了我的建议。希望这会为您指明正确的方向。

于 2011-12-11T22:51:13.857 回答
0

从阅读评论来看,这似乎是一个时间问题。我曾经在外部组件上遇到过类似的问题。它在浏览代码时有效,但在正常运行时无效。

我当时用 hack 解决了这个问题:

设置完所有值后,我在执行代码之前添加了一个小超时。

//set values
setTimeout(function(){
//I called the textbox I had problems with here
}, 20);

那时它起作用了,即使我宁愿正确解决它,这也比损坏的文本框要好。这会导致一个小的延迟,所以我实际上检查了我遇到问题的浏览器并运行了正常的代码。

于 2011-12-10T16:24:19.483 回答
0

您将 jQuery 对象保存在变量中;

curtrack =  $("a.jp-playlist-item")[j];

但是然后您尝试通过将其包装 $( ) 来使该变量成为 jQuery 对象

$(curtrack).attr({rel:j});

试试 curtrack.attr("rel", j);

于 2011-12-10T14:56:44.390 回答