我目前正在使用多维数组存储值,然后根据它是否满足两个要求进行循环,数字是否匹配,是否具有设置状态E.G 487 Online。
这实际上会根据事件在服务器创意中捕获并插入MD数组中而实时发生变化,并且事情的一切都很重要。
尝试以下列格式直观地表示每个呼叫状态:
步骤1到3相应地工作,问题出现在步骤4中。
我遇到的问题是每次手机改变状态时都使用JQuery .HTML来覆盖磁贴中的内容但经过一些调试和摆弄后我发现问题似乎是JQuery .HTML和/或如何我正在使用它和setTimeOut我想但我不知道为什么。
问题 Hangup事件被捕获........。HTML这里似乎没有显示,似乎被.HTML覆盖在网上事件中,在挂机后直接被捕获,因此显示来自在线事件的.html。
我发现当我在步骤1删除.HTML时它会停止问题,但是我在第1步中需要它。但是如果我把它留在那里它似乎覆盖了步骤4中的.HTML,我也需要一些原因。
Array看起来像这样,带有分机号码,SIP设备状态,设备所处的当前状态,例如振铃:
[ '487', 'online', 'Hangup' ],
[ '488', 'online' ],
[ '477', 'online', 'Hangup' ] ]
服务器端事件通常在捕获事件时的样子:
477 and 487 both hungup
[ [ '487', 'online', 'Hangup' ], [ '477', 'online', 'Hangup' ] ]
something happened to a ChannelDestroyed
Channel Output ChannelDestroyed
something happened to an endpoint
EndpointStateChange
477 current state is: online
[ [ '487', 'online', 'Hangup' ], [ '477', 'online', 'Hangup' ] ]
此处是我的代码:
//Handles events to signal current call states aka if 488 dials 487 highlight both tiles with those values.
socket.on("eventsCalls", function (calldata) {
for (var i = 0; i < calldata.length; i++) {
if (calldata[i][0] && calldata[i][2] === "Ringing") {
$("div[class*='tile']:contains('" + calldata[i][0] + "')").css("background-color", "yellow").append("<h4>User</h4><p>" + calldata[i][0] + " Is Ringing</p>");
} else if (calldata[i][0] && calldata[i][2] === "Hangup") {
$("div[class*='tile']:contains('" + calldata[i][0] + "')").html("<h4>User</h4><p>" + calldata[i][0] + " just hungup</p>").addClass("hangup");
setTimeout(function () {
$("div[class*='tile']").removeClass("hangup");
}, 3000);
} else if (calldata[i][0] && calldata[i][2] === "ANSWER") {
$("div[class*='tile']:contains('" + calldata[i][0] + "')").css("background-color", "orange").html("<h4>User</h4><p>" + calldata[i][0] + " Is Busy</p>");
}
}
});
// Handles which sip devices are currently registered and displays them on the web page.
socket.on("eventsRegister", function (regisdata) {
for (var i = 0; i < regisdata.length; i++) {
if (regisdata[i][0] && regisdata[i][1] === "online") {
$("div[class*='tile']:contains('" + regisdata[i][0] + "')").css("background-color", "green").html("<h4>User</h4><p>" + regisdata[i][0] + " Online</p>");
} else if (regisdata[i][0] && regisdata[i][1] === "offline") {
$("div[class*='tile']:contains('" + regisdata[i][0] + "')").css("background-color", "red").html("<h4>User</h4><p>" + regisdata[i][0] + " Offline</p>");
}
}
});
这个问题有没有更好的替代方案或解决方法?
编辑:JSFiddle想知道什么是尝试难以复制事件的捕获但当它遇到挂断时.html似乎被在线事件覆盖,似乎同时发生我认为。它对我的代码中的最后两个事件的颜色改变不起作用,但挂起的.HTML似乎被在线覆盖。
答案 0 :(得分:1)
我无法肯定地说,但您的setTimeout
缺少delay
参数。
var hangupDelay = 5000; // 5 seconds.
setTimeout(function () {
$("div[class*='tile']").removeClass("hangup");
}, hangupDelay );
这应该会在5秒后删除挂断类。
如果您未指定setTimeout
延迟参数;你几乎立即得到它:
https://developer.mozilla.org/en/window.setTimeout#Minimum_delay_and_timeout_nesting
延迟是毫秒(千分之一秒)的数量 函数调用应该延迟。如果省略,则默认为0 实际延迟可能更长;见下面的注释。
这可能会导致挂断类立即被删除并且似乎无法正常工作。