为什么不应该';我不能在JavaScript中使用Alert吗?

为什么不应该';我不能在JavaScript中使用Alert吗?,javascript,jquery,alert,Javascript,Jquery,Alert,我需要在某些情况下通知用户,并且已经看到不应该使用confirm()和alert()。相反,很多问题都提到在jQueryUI中使用模态,特别是在需要设置样式的情况下。这一切都很好,但是,归根结底,程序员说你应该远离它的原因是什么 这是一个很好的例子,说明了人们的感受,但几乎所有其他关于警报框样式的问题都有相同的评论。这仅仅是一个样式问题,还是有更根本的理由回避这种内置功能 更重要的是,没有一个答案是关于你应该使用什么。jQuery UI和类似的预构建解决方案只是唯一的答案吗?为什么?是性能还是安

我需要在某些情况下通知用户,并且已经看到不应该使用confirm()和alert()。相反,很多问题都提到在jQueryUI中使用模态,特别是在需要设置样式的情况下。这一切都很好,但是,归根结底,程序员说你应该远离它的原因是什么

这是一个很好的例子,说明了人们的感受,但几乎所有其他关于警报框样式的问题都有相同的评论。这仅仅是一个样式问题,还是有更根本的理由回避这种内置功能

更重要的是,没有一个答案是关于你应该使用什么。jQuery UI和类似的预构建解决方案只是唯一的答案吗?为什么?是性能还是安全性,还是缺乏经验的程序员需要易于使用的东西,或者

编辑:

好的,让我澄清一下。我之所以这样问是因为警报功能是为了防止用户意外删除他们正在做的工作,因为有三种方法可以在此页面上启动新计划,并且每种方法都会删除显示计划的div的现有内部html


我听到的大部分是,这对用户和UI都不好,但是,如果我想要的是引起愤怒、吸引注意力,那么我应该用什么来代替呢?有人提到提醒/确认停止JavaScript执行,可能会阻止您使用其他选项卡。这更接近于我所期望的功能性问题。我知道这对用户界面不好,但我在这里寻找更多的技术原因。

警报阻止JS执行。很难看。它的功能有限


最好使用模式对话框和回调来处理用户的选择。有许多库在这方面做得很好。

从设计的角度考虑一下。最终用户讨厌弹出窗口,提示/提醒/确认在本质上是非常“垃圾”的(被滥用)。模态窗口比警报窗口更“温和”(我的教授常说),可定制,更时尚


更不用说太多的弹出窗口可能会触发某些浏览器提供的“检查此处以禁用此网站的警报”。

以下是您不应在代码中使用警报的原因:

  • 正如您所说,很多警报框可能会让用户感到烦恼
  • 据我所知,警报框的样式是不可能的。此外,每个浏览器都会显示不同的内容,这可能在所有情况下都不适合您的网站设计
  • 大多数现代/普通浏览器在网站试图显示一些警报后会阻止警报,以防止警报垃圾邮件
您可以使用jQueryUI对话框作为替代,或者使用能够显示模式对话框的任何其他工具。 这样,您可以自定义/设置对话框的样式,浏览器不会阻止它们

我通常仅将警报框用于调试/错误报告,而不是更多。

没有“技术原因”表明您不应使用内置浏览器方法来实现警报和确认功能。这都是自以为是的

让我们把它分成两部分

切勿将警报用于调试,除非您打算让它出于某种目的停止代码的执行。否则,您应该使用
console.log
,因为如果代码涉及异步逻辑,警报实际上会更改代码的结果。“但是IE中不支持console.log!”是的,如果控制台打开,则支持。在生产代码中,调试代码无论如何都不应该存在。为了防止忘记console.log,只需对其进行polyfil即可。对于调试以外的用途,例如通知用户发生了什么,通常最好使用其他方式通知用户发生了更改,例如使用信息文本突出显示元素或横幅,在这种情况下,只要暂停执行不会影响代码,使用警报没有什么错

确认是在执行破坏性操作(如删除信息)之前询问用户“确定吗?”的标准方式。它很容易理解,并且被许多网站使用,所以我建议在您自己的代码中也使用它。另一种选择通常会导致额外的代码为应用程序增加不必要的复杂性。但是,请记住,confirm也会阻止执行,所以您应该确保它不会影响您可能正在运行的任何异步逻辑


如果异步代码编写正确,通常不会受到执行暂停的影响。

请查看并尝试以下链接:速度惊人。谢谢,伙计们,我现在就来看看。也许值得注意的是,堆栈溢出本身在提示删除确认时使用了浏览器原生的
confirm
。它真的很难看(与关闭和标记对话框相比),但也许它的视觉粗糙度真的是一个功能?如果你不使用它进行调试,它只是提供信息,你可以接受它的难看性,无论如何,使用它。它就在那里,它很简单,它是跨浏览器的,而且不会崩溃。删除记录时使用confirm()是标准的。对模态对话框做同样的操作会增加不必要的复杂性。是的,我理解这一点。如果这是面向客户的,并且每5-6个月使用一次以上,那么就更容易证明在UI上花费大量时间是合理的。我更想弄清楚他们的仇恨是从哪里来的。你认为这主要是因为这个吗?我认为这主要是因为太多开发人员错误地使用它进行调试,导致误报,比如认为ajax请求工作需要一个警报,而实际上它不工作,因为他们的逻辑是错误的。好吧,但为什么?这回答了一部分问题,但是为什么/如何在模态对话框和回调之类的情况下阻止JS执行呢