当前位置: 首页 > 知识库问答 >
问题:

甚至在用户在警报窗口上按ok之前,Javascript代码就已执行

姬魁
2023-03-14

在显示警报窗口之前,我需要删除视频元素、画布和画布上的按钮,一旦用户按下警报窗口上的ok按钮,我需要显示一些其他元素。目前我面临以下问题。

  1. 删除按钮前将显示警报窗口。因此,我们只是使用setTimeout来删除所有元素,然后再显示警报窗口来解决这个问题
  2. 用户按下“确定”按钮后应执行的UI代码在警报窗口显示后执行,用户单击时不停止。我认为在用户按下警报窗口上的Ok之前,不应该执行警报()旁边的代码

下面是Javascript代码

$("#remoteVideo").remove();
$("#localCanvas").remove();
$(".terminate_session_btn").remove();

// USED setTimeout TO DELAY THE DISPLAY OF ALERT WINDOW. WITHOUT
// setTimeout, ALERT WINDOW IS GETTING DISPLAYED BEFORE DELETING THE BUTTON.
setTimeout(function() {
    displayAndProcessUserTerminateAlertDialog();
}, 200);

function displayAndProcessUserTerminateAlertDialog() {
    socket.close();
    alert("User terminated the video call. Press 'Ok' button to create new session.");

    // BELOW CODE IS GETTING EXECUTED WITHOUT STOPPING FOR USER ACTION ON ALERT WINDOW.
    $(".main_container .item").hide();
    $("#video-session-menu").removeClass("active");
    $("#images-menu").removeClass("active");
    $(".sidebar ul li a").addClass("disabled");
}

任何人都可以帮助我理解为什么在用户按下警报窗口上的“确定”之前,代码执行不会停止,以及如何解决此问题。

更新:

有趣的是,如果我打开开发人员工具,问题就不会发生。若我不打开开发人员工具,问题总是会发生。我不知道如何解决这个问题。

共有1个答案

云焱
2023-03-14

显然浏览器没有警报的标准行为。因此,您可能希望使用您喜欢的行为实现自己的警报。您可以在此处进行测试:https://jsfiddle.net/rf0jd7te/1/

<!-- The Modal -->
<div id="myModal" class="modal">

  <!-- Modal content -->
  <div class="modal-content">
    <span class="close">&times;</span>
    <p>Alert Window</p>
    <p>
    <input type="button" value="OK">
    </p>
  </div>

</div>
/* The Modal (background) */
.modal {
  display: none; /* Hidden by default */
  position: fixed; /* Stay in place */
  z-index: 1; /* Sit on top */
  left: 0;
  top: 0;
  width: 100%; /* Full width */
  height: 100%; /* Full height */
  overflow: auto; /* Enable scroll if needed */
  background-color: rgb(0,0,0); /* Fallback color */
  background-color: rgba(0,0,0,0.4); /* Black w/ opacity */
}

/* Modal Content/Box */
.modal-content {
  background-color: #fefefe;
  margin: 15% auto; /* 15% from the top and centered */
  padding: 20px;
  border: 1px solid #888;
  width: 80%; /* Could be more or less, depending on screen size */
}

/* The Close Button */
.close {
  color: #aaa;
  float: right;
  font-size: 28px;
  font-weight: bold;
}

.close:hover,
.close:focus {
  color: black;
  text-decoration: none;
  cursor: pointer;
}

JS

console.log("before alert");
var modal = document.getElementById("myModal");
// Get the <span> element that closes the modal
var span = modal.getElementsByClassName("close")[0];
// Get the OK element that closes the modal
var OK = modal.querySelector("input[type=button]");
// When the user clicks on <span> (x), close the modal
function close() {
  modal.style.display = "none";
  console.log("after alert");
}
OK.onclick = span.onclick = function() {
  close();
}

// When the user clicks anywhere outside of the modal, close it
window.onclick = function(event) {
  if (event.target == modal) {
    close();
  }
}
modal.style.display = "block";
 类似资料:
  • 我只是通过终端安装android studio,我的ubuntu版本是14.04。我的计算机上已经安装了Java8。我安装android studio的程序正是这样的: sudo apt-add-repository ppa:paolorotolo/android-studio

  • 问题内容: 我想做这样的事情: 如何捕获对话框中的输入? 问题答案: 需要有两个处理程序,一个和一个。见下文。这将确保,如果在对话框中单击“取消”,则不会触发。但是,如果单击“确定”,将执行并将运行必要的代码。这可以用于释放数据库锁,整洁地关闭打开的会话等。

  • 问题内容: 我在这里尝试取消文件上传时遇到了一些情况。我所做的事情是说,如果用户单击“取消”按钮,则它将仅删除iframe,这样它就不会进入将文件上传到服务器并将数据插入数据库的页面。 现在,如果用户快速单击“取消”按钮,则可以正常工作,但我意识到的问题是,如果用户单击时间很晚,则有时无法及时删除iframe该文件刚刚在用户点击“取消”按钮之前上传。 因此,我的问题是,如果用户在单击“取消”按钮之

  • 问题内容: 我在更新面板中更新时使用以下代码显示消息 它工作正常。 但是,当我在使用重定向后,它将加载页面而不显示消息。我希望用户看到该消息,并在单击“确定”后应重定向。 问题答案: 使用javascript显示警报,然后使用相同的方法进行重定向:

  • 当用户按下ctrl键时,我试图在Chrome中保存HTML文件,但Chrome崩溃了。 (我只想下载HTML文件的源代码) 我读到它发生是因为我的文件比1.99M大... 在第一次尝试中(在我知道Chrome崩溃之前): 第二次尝试,在我读到崩溃后,我使用了: 这里我得到了错误: 我不知道,但我读到我需要将我的字符串编码为base 64:如何在JavaScript中将字符串编码为Base64? 有

  • 问题内容: 我正在使用带有javascript启用功能的webview,因为它在我的应用程序中是必需的。我的问题是,在网络视图中加载网址时,我需要避免弹出窗口,有没有办法做到这一点? 我遇到过onJsAlert()方法,但是根据androids文档 这不是我想要的。我想避免弹出窗口和警报框(包括提示和确认),将不胜感激 谢谢! 问题答案: 您可以尝试覆盖警报,确认等。也许在何时允许和何时不允许警报