2017-05-18 154 views
-1

下面頂部函數中的一個case語句不按順序執行。目前,它直接提示,如果您點擊取消,operatorPickup從來沒有聽說過。如果我輸入「警察」,我得到了警方的記錄是在稱爲在當前功能然後我得到OperatorAnswer不同的功能,這使得完全沒有意義的,它是在2階去,3,1 - 當3甚至不在相同的功能!JavaScript函數拒絕按順序執行

根據以前的經驗,我嘗試了延遲提示,以防提醒,提示或確認阻止用戶界面並優先考慮,但這也沒有幫助。

function response() { 
     switch(number) { 
      case "0": 
       var operatorPickup = new Audio('OperatorAnswer.wav'); 
       operatorPickup.play(); 
       setTimeout(function() { 
        number = prompt("Operator, your number please? (Numbers only; enter 'police' for police and emergency)"); 
        number = number; 
        operatorPutCallThrough(); 
       }, 9); 
       break; 
      case "911": 
       var pickup911 = new Audio('911-xxx-fleet.mp3'); 
       pickup911.play(); 
       break; 
      case "18477651008": 
       var pickupMCI = new Audio('MCI.wav'); 
       pickupMCI.play(); 
       break; 
      case "8675309": 
       var pickup8675309 = new Audio('discoornis-bell-f1.mp3'); 
       pickup8675309.play(); 
       break; 
      case "police": 
       break; 
      default: 
       var pickupDefault = new Audio('ldcircuits-bell-f1.mp3'); 
       pickupDefault.play(); 
     } 
    } 
    function operatorPutCallThrough() { 
     if (number == "police") { 
      var operatorPoliceTransfer = new Audio('OperatorPolice.wav'); 
      operatorPoliceTransfer.play(); 
     } 
     response(); 
    } 

我怎麼能強迫的情況下 「0」 switch(number)爲了執行

回答

1

您可以在play()上使用事件偵聽器,因此只會在媒體文件播放完畢後纔會提示。

我從來沒有與HTML5的audio作爲然而,但這個問題的工作:Detecting when HTML5 audio is finished playing (more than once)?建議你怎麼能聽的事件,所以你可以嘗試:

operatorPickup.addEventListener("ended", function(){ 
    number = prompt("Operator, your number please? (Numbers only; enter 'police' for police and emergency)"); 
    number = number; 
    operatorPutCallThrough(); 
}); 

operatorPickup.play();

+0

如果我這樣做,根本不會播放任何錄音,但警告框不會彈出。一切只是停止 – InterLinked

+0

這是沒有意義的...你有控制檯中的任何錯誤?你是否在'var operatorPickup = new Audio('OperatorAnswer.wav');''和operatorPickup.play();'之間添加了eventlistener? –

+0

我在var operatorPickup定義之前就已經完成了,解決了它! – InterLinked

1

如果您單擊取消,變量number被設置爲null,這不屬於case語句。如果您想要在零和0情況下使用相同的情況,則應該立即在case "0"之上或之下添加case null。如果在下一個案例之前沒有break,switch-statement將執行下一個案例,依此類推,因此您可以堆疊case語句而不會中斷應爲這些案例中的任何一個執行的代碼。

+0

嗯...我試着設置var previousNumber = number,然後在case 0運行時將number更改爲previousNumber,如果number爲null ...但是consolelog不報告它們中的任何一個... – InterLinked