下面顶部函数中的一个case语句不按顺序排列。目前,它会直接显示提示,如果单击“取消”,则根本不会听到operatorPickup
。如果我输入警察',我会在当前功能的结束和的一个不同的功能中进行警察录音我得到OperatorAnswer
,这完全没有意义,它是按顺序2,3,1进行的 - 当3甚至不在同一个函数中时!
根据之前的经验,我尝试延迟提示,以防止警报,提示或确认阻止了用户界面并优先使用,但这也没有帮助。
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)
中按顺序执行 ?
答案 0 :(得分: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();
答案 1 :(得分:1)
如果单击“取消”,变量number
将设置为null
,这不在case语句中。如果要在null和0上转到相同的大小写,则应在case null
的上方或下方添加case "0"
。如果在下一个案例之前没有break
,则switch语句将执行下一个案例,依此类推,因此您可以堆栈案例语句,而不会中断应该针对任何一个案例执行的代码。