2011-06-29 66 views
4

我有一个链接,做一些潜在的危险功能(删除一些东西)。我想提醒用户他是否真的想要这样做。我想用javascript来做,它应该非常简单。当点击一个链接时提示用户确认

我的解决方案迄今:

<a href='/delete' onclick='return confirm("Are you sure?")'>delete</a> 

..是一种方式,它不是由Firefox和IE中点击触发坏。

<a href='/delete' onmousedown='return confirm("Are you sure?")'>delete</a> 

..不起作用。即使单击确定返回true,链接也不会导航。

什么是正确的方式来实现呢?

+0

哪个浏览器有问题?第一种解决方案似乎适用于Chrome中的左侧和中间点击。 –

+0

我建议你使用按钮代替链接 – Teneff

+2

不要使用链接(或任何类型的GET请求)删除东西。 HTTP规范将GET定义为安全的。使用提交按钮来使用表单。 (然后中间点击不会绕过onsubmit事件)。 – Quentin

回答

13
<a href='#' onclick='confirmUser()'>delete</a> 

的JavaScript

function confirmUser(){ 
    var ask=confirm("Are you sure"); 
    if(ask){ 
     window.location="/delete"; 
    } 
} 
+1

将window.loaction更改为window.location –

5

我只是解决了这个问题的网上银行客户端。每当用户导航到第三方站点时,FDIC都需要确认“speedbump”。我们希望不干扰地做到这一点,并使其无法避开。

我已经用IE,Firefox,Chrome和Android测试过了 - 单击,右键单击,中间单击,移动单击,移动F10,输入,长按,一切(Firefox是最难的)。要么你得到speedbump或者你得到一个空白的标签,你无法绕过它。

document.ready = function() { 

     var handleSpeedBump = function(e) { 
      e.preventDefault(); 

      var href = this.getAttribute("data-href"); 
      var sure = confirm("Are you sure you want to navigate to " + href + "? This is a third party site and not owned by this institution."); 
      if (!sure) return; 
      document.location = href; 
     } 

     $("a.speedbump") 
      .click(handleSpeedBump) 
      .bind("contextmenu", handleSpeedBump) 
      .dblclick(handleSpeedBump) 
      .each(function() { 
       var href = this.href; 
       this.setAttribute("data-href", href); 
       this.href = "javascript:void('Navigate to " + href.replace("'", "") + "')"; 
      }) 
    } 

为了完成这项工作,只需按照常规编写链接并将“speedbump”添加到其类中即可。

<A href="www.thirdpartysite.com" class="speedbump">Here is the link!</A> 
+1

正常工作...很好的工作... –

+0

锚点元素上的类应该是“speedbump”(前面没有点),但确实很棒。 – fgblomqvist

相关问题