2016-05-25 8 views
1

私はが常ににならないJavasript関数を持っています。この関数はjQuery.bindの下にあり、jQuery.bindはページのビデオプレーヤーに添付されています。ビデオプレーヤーが準備完了したら、機能を実行する必要があります。機能のいくつかの要素は、ビデオプレーヤーの準備ができて初めて取得できるビデオの期間に依存します。Javascript関数が要素の準備完了後に常に読み込まれない

時間の大部分はうまくいくようですが、時には(3/10倍)うまくいきません。なぜこれが起こっているのか分かりません。

ML = (typeof ML === "undefined") ? {} : ML; 
ML.player = null; 

//Initialization of the video player 
jQuery(document).ready(function() { 
    var vidId = vidIdRaw.split("/"); 
    ML.player = new SV.Player({ 
     videoId: vidId[0] 
    }); 
    //More functions are initialized under the document.ready 

    //Waits for video player to be ready before executing function 
    //This is the function that doesn't always run 
    ML.player.bind('ready', function(obj) { 
     var isReady = true; 
     jQuery('#duration-time').html(formatTime(ML.player.getDuration())); 
     //Functions initialized above are called and run here as well. 
    } 
} 

多くの機能が残っていますが、多くのコードが含まれています。私は関連情報を含めました。

+0

jQueryでどのようにイベントが発生するのか分かりませんが、私が見ることのできるコードに基づいて、ドキュメントが準備完了する前にプレーヤーが準備ができていると思います。あなたのplayerがdocument.ready関数で準備ができているかどうかをテストする方法はありますか?それがすでに存在する場合、バインドの中でコードを実行しますか? – Toby

+0

うーん、私はそれについては分かりません。しかし、私は(ドキュメント).readyの下でビデオプレーヤーの初期化を持っています。動画プレーヤーは、最初に文書を準備するのを常に待ってはいけませんか? – als26

+0

最初にSV.Playerを作成し、それから準備ができていることを聞いています。準備が整ったイベントをすばやく送出して、すぐにdocument.ready関数に戻ってからイベントをバインドすることができますか?ビデオがキャッシュされているとしますか?ビデオを挿入せずにプレーヤーをインスタンス化する方法はありますか?プレーヤにビデオをロードする前に、準備完了イベントを追加してください。そうすれば、それは常に発火するでしょう。 もう一度 - 投稿したコードは推測できますが、イベントが発生していない場合は、SVにバグがあるか、イベントの順序が問題であることを意味するだけです。 – Toby

答えて

0

プレーヤでreadyイベントをできるだけ早くバインドしてください。 「More functions are initialized ...」と書かれたコードが実行に時間がかかり、プレイヤーのreadyイベントが見逃される可能性があります。

+0

私は、初期化されている関数は、ビデオプレーヤーの準備ができて実行されていることを言及して忘れてしまった。それは可能な限り遠いです。申し訳ありませんが、これを含む質問を編集しました。 – als26

関連する問題