2011-06-29 7 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> 

..動作しません。 OKをクリックすると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.lactionをwindow.locationに変更してください。 –

5

私はオンラインバンキングのクライアントのために、この問題を解決しました。 FDICでは、ユーザーがサードパーティのサイトに移動するたびに、「スピードバンプ」の確認が必要です。私たちはそれを目立たないようにし、周りを回ることを不可能にしたかったのです。

これをIE、Firefox、Chrome、Androidでテストしました。クリック、右クリック、ミドルクリック、シフトクリック、シフトF10、入力、ロングタップ、すべて(Firefoxは難しい)あなたがスピードバンプを取得するか、空白のタブが表示されても、それを回避することはできません。

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

関連する問題