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

あなたがしていることの詳細は少し変わっていると思いますが、それを達成するためのより安定した方法を見つけようとしました. あなたが見ている一貫性のない動作は、タイミングの問題が原因であると思われます. 「アラート」、「デバッグ ステップ」、および「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);
});

第三に、完全な例

このフィドルを作成して、遊んでもらいました。それは私の提案をより完全な方法で示しています。うまくいけば、これはあなたを正しい方向に向けます。

于 2011-12-11T22:51:13.857 に答える
0

jQuery オブジェクトを変数に保存しています。

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

しかし、それを $( ) でラップして、その変数を jQuery オブジェクトにしようとします。

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

curtrack.attr("rel", j); を試してください。

于 2011-12-10T14:56:44.390 に答える
0

コメントを読むと、タイミングの問題のようです。かつて、外部コンポーネントで同様の問題が発生しました。コードをスティープするときは機能しましたが、通常の実行中は機能しませんでした。

その時はハックで解決しました:

すべての値を設定した後、コードを実行する前に小さなタイムアウトを追加しました。

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

その時は機能し、適切に解決したかったのですが、これは壊れたテキストボックスよりも優れていました。わずかな遅延が発生するため、実際に問題のあるブラウザをチェックし、それ以外の場合は通常のコードを実行しました。

于 2011-12-10T16:24:19.483 に答える