【问题标题】:How to disable Esc button event on alert?如何在警报时禁用 Esc 按钮事件?
【发布时间】:2019-07-01 12:13:39
【问题描述】:

我想在单击按钮时显示alert 消息。按警报弹出窗口的确定后,我将进行进一步处理。

这是预期的流程,但是当用户按下 Esc 按钮时,也无需单击“确定”,我的页面就会进入进一步处理。我想限制此流程,即限制 Esc 按钮事件,但我找不到任何方法。

var keynum

if (window.event) { // For IE
  keynum = e.keyCode
} else if (e.which) { //For netscape Mozilla Firefox
  keynum = e.which
}

if (keynum == '113' && saleFlag == true) {
  var totalQty = document.getElementById('totalQty').textContent;
  var totalAmt = document.getElementById('totalAmount').textContent;

  alert("You Played Total Qty: " + totalQty + " of Rs. " + totalAmt);    
} else if (keynum === '27') {
  return false;
}

但警报消息仍然关闭。

我想要在 113 键码事件上打开的警报消息。

【问题讨论】:

  • 简单的答案,你不能。它由操作系统控制,其级别低于 JS 可以访问的级别。如果您想在明确单击“确定”按钮之前阻止访问,那么您需要使用第三方库,该库在 HTML 中添加模式弹出窗口,而不是使用 alert() - 尽管请注意,这些更容易绕过。
  • 也许用confirm代替..while (!confirm("continue"));
  • 问题是当警报显示时你的javascript被忽略了。它会阻塞执行,所以不会运行任何 js 代码
  • @Keith 我也试过这个但确认也关闭了!
  • 这是an XY problem。您应该研究如何构造事物以使转义键不会干扰,而不是如何阻止转义键工作。此外,请不要使用警报...出于技术原因,这从一开始就是非常糟糕的做法,而且还会超级恶化用户体验。

标签: javascript jquery


【解决方案1】:

alert() 的问题在于它总是会返回undefined,不会告诉你按下了什么。相反,您可以使用confirm(),这将允许您显示类似的弹出窗口。

但是,confirm 的优点是,如果您在弹出窗口中单击“确定”,它会返回一个 true,如果您按 esc 或“取消”,它会返回一个 false

因此,使用confirm,您可以使用do-while 循环来不断弹出您的弹出窗口,直到用户按下“OK”(或按下enter 键)

请看下面的例子:

let res;
do {
  res = confirm("Popup");
} while(!res);

使用本机确认/警报框并不是一个好的用户体验,因为它会冻结 UI 线程。如果可以避免,我建议使用 DOM 打开通过 HTML 构建的弹出窗口/模式。这可以通过使用库轻松完成。

【讨论】:

  • 这当然是一种解决方法,但从用户体验的角度来看,它确实不是一个好的解决方案。您正在强迫某人单击“确定”。您不能通过单击取消来关闭对话框,因此取消按钮会让您的用户感到烦恼。这种逻辑也经常被网站可信度检查发现,并会阻碍您的结果。
  • @RoryMcCrossan 是的,我同意,这绝对不是我在专业事务中必须使用的解决方案。对于类似的事情,我会考虑使用 jQuery/3rd 方插件,例如 swal。
  • @NickParsons 感谢它解决了我的问题,但我知道这不是推荐的方式,也不必要显示取消按钮。我一定会尝试使用 3rd 方库。
  • 好的,谢谢...您有兴趣吗?如果没有,不用担心。感谢阅读。
  • @Crashalot 我得稍微研究一下。但目前我今年很忙,所以不确定我是否能够做到:/
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-06
  • 2015-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多