我正面临着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天过去了...任何帮助/线索/技巧将非常感激
答案 0 :(得分:1)
虽然我发现你所做的事情的细节有点奇怪,但我试图找到一种更稳定的方法来实现它。您看到的不一致行为似乎是由于时间问题所致。 “警报”,“调试步进”和“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);
});
第三,完整示例
我创建this fiddle让你玩。它以更完整的方式展示了我的建议。希望这能指出你正确的方向。
答案 1 :(得分:0)
您正在将jQuery对象保存在变量中;
curtrack = $("a.jp-playlist-item")[j];
然后你尝试通过将它包装为$()
来使该变量成为jQuery对象$(curtrack).attr({rel:j});
尝试curtrack.attr(“rel”,j);
答案 2 :(得分:0)
从阅读评论看起来似乎是一个时间问题。我曾经有过类似的外部组件问题。它在通过代码时工作,但在正常运行时却没有。
我用黑客攻击解决了这个问题:
设置完所有值后,我在执行代码之前添加了一个小超时。
//set values
setTimeout(function(){
//I called the textbox I had problems with here
}, 20);
它起作用的时间,即使我宁愿正确地解决它,这比破碎的文本框更好。它会导致一个小的延迟,所以我实际上检查了我遇到问题的浏览器,否则运行正常的代码。