【问题标题】:Leave Page Alert Unless Submit Button Clicked除非单击提交按钮,否则离开页面警报
【发布时间】:2012-06-19 23:58:24
【问题描述】:

如果用户试图在订单完成之前以任何方式离开订单流程,我希望实施一个警告,当然除了在付款按钮之后。

类似这样的:

<script type="text/javascript">
window.onbeforeunload = function(){
return 'You must click "Buy Now" to make payment and finish your order. If you leave now your order will be canceled.';
};
if document.getElementsByClassName('eStore_buy_now_button').onclick = function(){
};
</script>

我确信这在某些方面是有害的,但这是我可以说明我正在尝试的最佳方式。而且我知道有些浏览器会显示默认文本而不是我写的实际警告,这很好。

一些注意事项,我宁愿使用普通的旧 JS 而不是加载 jQuery 来完成这一项简单的任务。页面没有设置,是一个简单的离开页面或者点击“立即购买”操作。

更新

我向您保证,这不是为了我,而是为了用户。尽管已经明确解释了(做什么),但我认为用户在该过程真正完成之前出于即时满足而匆忙离开,忽略消息的心态。这是一个简单的两步过程,他们提交项目的详细信息,然后付款。无论出于何种原因,他们都在提交详细信息,然后大约 50% 的时间没有完成付款。然后他们会跟进“那么,你是在做这个项目还是在做什么?”然后我必须解释“你从来没有完成你的订单”。他们接着说“哎呀,你走吧。”

不幸的是,我将其归为营销和网页设计 101。规则 #1,人们是愚蠢的。不要被粗鲁或悲观地理解。基本上,这个想法是假设每个人在你的设计和指导上都是愚蠢的,这样你就可以做出一个 5 岁的孩子可以做到的简单事情。我完全同意不将用户作为人质。但是这个页面只能在他们发起的预定订单过程的中间到达(这个页面永远不会以浏览的方式到达)。因此,我认为这是一个非常合理的用例,您可以在其中避免自己的常见用户错误。不精通技术的客户群体,因此他们确实需要此类指导。

【问题讨论】:

  • 你不能那样做。你可以建议用户这样做
  • @MarkLinus 他可以做到,我意识到这不是最好的主意,因为用户要么会以破坏会话的方式杀死整个页面,要么会非常恼火,但这是可能的,而且没有任何违法行为关于告诉用户不要离开页面,因为他们的交易不完整。

标签: javascript onclick submit alert


【解决方案1】:
document.querySelector('.eStore_buy_now_button').addEventListener("click", function(){
    window.btn_clicked = true;      //set btn_clicked to true
});

window.onbeforeunload = function(){
    if(!window.btn_clicked){
        return 'You must click "Buy Now" to make payment and finish your order. If you leave now your order will be canceled.';
    }
};

这将在页面卸载(例如离开页面)时提醒用户,直到 btn_clicked 设置为 true

演示:http://jsfiddle.net/DerekL/GSWbB/show/

【讨论】:

  • 谢谢,我早上试试看。
  • 效果很好。谢谢你。一个不错的额外/提示是这不会影响新窗口target="_blank" 链接。那么,如果您在设置页面上使用它并且需要有?表单字段旁边的链接以获取额外信息,用户可以在没有警告的情况下弹出这些链接。 确保在您的表单之后为任何偶然发现此解决方案但可能不知道的人加载 JS。
  • 我花了很长时间才找到这个。谢谢。
  • "确保在你的表单之后加载 JS..." -- 你真正关心的是在你的表单加载后执行 JS,所以如果你使用 jquery,例如,你可以把它包在$(document).ready()
【解决方案2】:

别这样。

在可用性方面有一条细线 - 一方面,有时我可能打算下订单但不小心离开了页面;另一方面,它可能很快就会变得烦人。当浏览器设置为保存上一个会话(即在下次启动时重新打开选项卡)并且一个页面以这种方式运行时,您最终会下一次重新打开该选项卡(在 Mac Safari 上确认),丢弃其余的选项卡。他们不会再向您购买了!

我建议您通过内联消息向用户明确表示订单尚未提交,他们仍需要确认他们的操作,但如果他们不小心导航离开,您应该轻松地从他们离开的地方继续。将此类信息存储在 cookie 中相当简单,以便在后续页面访问时提示用户“您的订单不完整,您想现在完成吗?”

作为替代方案,如果用户分心,您可以使用不活动警报(想想在线银行会在您的会话即将到期时提示您)将用户带回到“完成订单”页面。

如果您确定要依赖此事件,this question 的答案可能会提供更好的见解。基本上,不应依赖基本文本警告之外的功能或其实现,因为跨浏览器的实现不一致 (?) 以及被用户阻止的可能性。

另一个更新:

在 Derek 对 Gmail 等使用的这种方法的评论的提示下,我遇到了 an article 建议您坚持使用 onunload 并依靠 AJAX 调用来保存页面的状态 - 这支持了我的想法即使从未触发过 javascript 事件,也允许用户从离开的地方继续前进。

【讨论】:

  • 为什么不用它呢? Google 一直在使用它,例如 Gmail 就是其中之一。
  • @Derek: touche,尽管它们完全不引人注目,我会检查一下! (你说的是未保存的草稿等,对吧?)
  • 也许这表明其他领域需要进一步调整?没有看到有问题的表格就很难猜到,但是对于用户来说,这个过程可能不够清楚。我的意思是,如果您有一个名为完成订单 的按钮会导致这个特定问题,它可能会被解释为完成订单并带我进入“fyi 确认屏幕”。我认为这不是那么明显,但 URL 将有助于更好地判断情况
  • @o.v. - 相信我,这很清楚。人们不会在网站上倾听、遵循指示等,这并不是什么新鲜事。这就是为什么我们有表单验证(除了垃圾邮件)和“离开页面”警告和其他威慑/故障保险的合法用例。它清楚地表明他们正在提交详细信息,并且在下一页上他们需要单击“立即购买”。然后在“立即购买”页面上以粗体显示“您的订单尚未完成 - 请点击“立即购买”完成订单”。因此,尽管您提出了一些有效的观点,但这确实绝对是一个合法的例外。
  • @o.v. - 不用担心,没想到你做到了。只是想为一个合法的用例做一个彻底的案例,以造福他人。您可能想要更改“不要这样做”。类似于“尽量避免此类措施”。这将是更准确和更好的信息/建议,我完全同意。
猜你喜欢
  • 1970-01-01
  • 2018-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-18
  • 2014-11-22
相关资源
最近更新 更多