2017-04-10 8 views
1

ネストされたタグを使用してナビゲーションの2番目(および3番目)のレベルを開く基本的なモバイルナビゲーションドロップダウンメニューを作成しました。ただし、要素はアンカータグにネストされているため、デフォルトのアンカーイベントもトリガーされます。アンカーの子要素をクリックするときに、アンカーのデフォルトイベントを防ぐ方法はありますか?JavaScript - 親アンカー要素のevent.defaultを防止する

HTML

<ul class="main-menu"> 
    <li> 
     <a href="some-link.html">Some Link 
      <span class="target"></span> 
     </a> 
     <ul class="submenu"> 
      <li><a href="some-link.html">Some Link</a></li> 
      <li><a href="some-link.html">Some Link</a></li> 
      <li><a href="some-link.html">Some Link</a></li> 
     </ul> 
    </li> 
</ul> 

例のJavascript

$('span.target').on('click', function(event) { 

    $(event.target).parent().preventDefault(); 

    // Do somthing 

}); 
+1

試して 'event.stopImmediatePropagation()' –

+1

あなたがそれを使用したくない場合は、なぜあなたはachorタグを使用していますか? divや別のスパンを使用してjsを使用して、必要な動作を達成するのはなぜですか? – Cruiser

+0

preventDefaultはDOMの一部ではなく、イベントの一部です。あなたがhttps://api.jquery.com/event.stoppropagation/ – epascarello

答えて

1

このコードを試すことができます。アンカーで子をクリックすると、親のアンカー要素のデフォルトの動作が妨げられます。私はjavascriptをここにコアを使用します。

var menuAnchor = document.querySelectorAll('.main-menu a'); 
 

 
for(var i = 0, len = menuAnchor.length; i < len; i++){ 
 
\t menuAnchor[i].addEventListener('click', function(event){ 
 
\t \t if(event.target != this) event.preventDefault(); 
 
\t }); 
 
}

+0

不幸なことに、私が望むアンカーのデフォルトアクションが妨げられるでしょう。アンカー内の子要素をクリックしたときに起動させたくありません。 –

+0

私はコードを変更しました。今はうまくいきます。 –

+0

アンカーの子をクリックすると、デフォルト(リンクの閲覧を停止)が防止されます。しかし、アンカー(アンカーの子ではない)をクリックすると、デフォルト(リンクを参照)が防止されません。 –

1

あなたはイベントの伝播を停止し、それがデフォルトの動作です取り消すことができます。この参照してください:私はアンカータグ(A)に結合していた場合には、コメントで述べたように

$('span.target').on('click', function(event) { 
 
    event.stopPropagation(); 
 
    event.preventDefault(); 
 
    
 
    // the rest of your code here... 
 
});

を、私は、私の「自動」ワークフローの一部として、これらの2行を追加し、 (preventDefault())、およびstopPropagationを親要素のバインドされたイベントがトリガーされるのを避けるために、ページから移動するデフォルトの動作を防ぎます。

+2

をしたいと思っているように聞こえます。いずれか他のことをすると効果があります。また、 'return false'も実行します – charlietfl

+1

私はこれらの2行をアンカータグ( 'a')にバインドしてページから移動するデフォルトの動作(' preventDefault() ')や親要素を避ける' stopPropagation'を防ぐために私の '自動'ワークフロー'束縛された出来事が引き起こされるのを防ぎます。 – JorgeObregon

+0

私は誤解されるかもしれませんが、これは単純に、私がに添付したイベント/ハンドラーがアンカーにバブリングするのを防ぐのではないでしょうか? –

関連する問題