2013-10-06 108 views
4

我在這裏創建了我的功能的小提琴(http://jsfiddle.net/rhy5K/10/)。現在我想禁用按鈕點擊,例如play/pause,如果聲音播放像​​。如何禁用點擊,如果功能處於活動狀態

我只知道如何禁用表單提交按鈕,但我很困惑如何在我的情況下禁用點擊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小提琴演示可以在加載時播放聲音

+0

爲什麼我一不接受這一上述問題的任何回答。我的問題是否不恰當或我身邊的其他錯誤? – beginner

+2

歡迎使用StackOverflow。 StackOverflow是大多數人居住的地方。雖然有些奇才可以在6分鐘內寫出最驚人的答案,但大多數人都需要比這更多的東西。請...耐心等待... – Sumurai8

+0

http://stackoverflow.com/questions/9437228/html5-check-if-audio-is-playing – Sergio

回答

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

DEMO.

+0

我已經標記了代碼中的更改,它是'< - '。 –

+0

其實我沒有正確看待其他功能,但邏輯是一樣的,可能不是相同的上下文。 –

+0

您可以更具體地瞭解您正在進行的功能嗎? –

0

在jquery中,它可以通過取消默認操作輕鬆完成。這是示例。

$("#btn_start").click(function(event){  
    if(not_active_flag){ 
     // Prevent anchor to active 
     return false; 
    }else{ 
     // Anchor active as usual 
     return true; 
    }  
}); 
0

在你的情況下,該鏈接將最終調用this.buttonHandler,它具有以下代碼:

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

因爲buttonHandlerplayGetReady之前執行連接,這是不可能讓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()之前就代表你的問題中的代碼,但你可能有更好的主意,代碼執行的順序。

相關問題