0

div 内にアンカー リンクがあります。アンカー リンクと div の両方で onclick イベントを個別に処理したいのですが、現在、アンカー リンクをクリックすると、div の onclick イベントもトリガーされます。これを防ぐにはどうすればよいですか?

コードは次のとおりです。

<html>
     <頭>
     <スタイル>
     #箱 {
          背景色: #ccffcc;
          幅: 400px;
          高さ: 200px;
     }
     </style>
     <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js">
     </script>
     <script type="text/javascript">
          $(document).ready(function() {
               $("#mailto").click(関数(イベント) {
                    // クリックすると電子メール クライアントが正しく開きます
                    $("a[@href^='http']").attr('target','_blank');
                    リターン(偽);
               });

               $("#box").クリック(関数() {
                    // #mailto id をクリックしても、常にホームページに移動します
                    window.location = '/index.php';
               });
          });
     </script>
     </head>
     <本体>
     <div id="ボックス">
          <a href="mailto:someone@psomewhere.com" id="mailto">someone@psomewhere.com
    </div>
     </body>
</html>

mailto がロードされた後にコードの実行を停止する方法はありますか?

ありがとう!

ジョン

4

3 に答える 3

0

イベントは DOM ツリーをバブリングしており、e.stopPropagation();それを停止します。

$("#mailto").click(function(event) {
    event.stopPropagation();
    // correctly opens an email client if clicked
    $("a[@href^='http']").attr('target', '_blank');
    return (false);
});

$("#box").click(function() {
    // always goes to the home page, even if the #mailto id is clicked
    window.location = '/index.php';
});​

Fiddle http://jsfiddle.net/uwJXK/
stopPropagation() について http://api.jquery.com/event.stopPropagation/

于 2010-09-11T16:18:05.187 に答える
0

アンカーが適切に閉じられていないことが原因である可能性があります。または、それは確かに役に立たないでしょう

于 2010-09-11T16:18:12.073 に答える
0

HTML が有効であることを確認する必要があるため、a タグを終了します。

<a href="mailto:someone@psomewhere.com" id="mailto">someone@psomewhere.com<a/>

それでも問題が発生する場合は、これを試してください。

$("#mailto").click(function(event)
{
    event.stopPropagation();
    if(event.srcElement == 'HTMLAnchorElement')
    { 
        //Process
    }
});
于 2010-09-11T16:19:54.510 に答える