4

ここで関数のフィドルを作成しました( http://jsfiddle.net/rhy5K/10/ )。ボタンのクリックを無効にしplay/pauseたいGet ready,5,4,3,2,1

フォーム送信ボタンを無効にする方法しか知りませんが、私の場合はクリックを無効にする方法が非常に混乱していますhyperlinks

コード例を使用した説明:

これを無効にしたい

<a href="#" id="btn_start">PLAY</a>

インタープリターが以下のコードを実行している間にクリックします。

var playGetReady = function (done) {
    var ids = ['audiosource', 'a_5', 'a_4', 'a_3', 'a_2', 'a_1'],
        playNext = function () {
            var id = ids.shift();
            document.getElementById(id).play();
            if (ids.length) {
                setTimeout(playNext, 1000);
            } else {
                done();
            }
        };
    playNext();
};

警告:この JS フィドル デモでは、読み込み時にサウンドが再生される場合があります

4

3 に答える 3

1

これを試すこともできます (次の機能の変更)。

App.prototype.start = function () {
    var self = this;
    // unbind for a while
    self.$button.unbind('click', self.buttonHandler); // <--
    var start = function () {
            // start countdown
            self.intervalHandle = setInterval($.proxy(self.tick, self), 1000);
            // bind again
            self.$button.click($.proxy(self.buttonHandler, self)); // <--
            // change button text to PAUSE
            self.$button.text('PAUSE');
        };

    if (this.newTimer) {
        playGetReady(start);
    } else {
        start();
    }
};

デモ。

于 2013-10-06T08:22:13.753 に答える
0

あなたの場合、リンクは最終的this.buttonHandlerに次のコードを持つ を呼び出します。

App.prototype.buttonHandler = function (e) {
    e.preventDefault(); // prevent anchor default action
    this.toggle(); // toggle play/pause
};

buttonHandlerが実行される前にアタッチされるため、他のクリック ハンドラーの実行を防ぐために使用するアンカー要素にクリック ハンドラーをアタッチするplayGetReadyことはできません。playGetReady.stopImmediatePropagation()

この場合、コメント内の @gp. のソリューションが最適なソリューションである可能性が最も高いです。あなたの場合、アプリでローカル変数を使用することさえできるかもしれません。グローバル変数を使用する場合は、 で参照しwindow.yourglobalvariableます。ローカル変数を使用する場合は、必ずどこかで定義して で参照してthis.yourvariableください。buttonHandler を次のように変更します。

App.prototype.buttonHandler = function (e) {
    e.preventDefault(); // prevent anchor default action
    if( this.soundready )
        this.toggle(); // toggle play/pause
};

適切な場所でこの変数falseを作成して、「ボタン」が機能しないようにします。ボタンが機能するようになったら、変数を に変更しますtrue。質問のコードの直前にあるはずだと思いdone()ますが、コードが実行される順序については、おそらくより良いアイデアがあるでしょう。

于 2013-10-06T08:13:18.110 に答える