1

無効にしたいリンクがあります。問題は、サブリストを持つliにあるため、それらのリンクも無効にすることです。HTML は基本的に次のようになります。

<div id="main">
<ul class="index"><li class="firstLI"><a href="some other URL"></a></li>

<li class="secondLI"><a href="disableMe">Disable this Link</a>
   <ul>
        <li><a href="dontDisableMe">Don't Disable Me</a></li>
        <li><a href="dontDisableMe">Don't Disable Me</a></li>
   </ul>
</li>
<li>third</li></ul>
</div>

「li」クラスの secondLI 内の「a」を無効にしたいのですが、付随する UL のすべての子を無効にしたいわけではありません。

私はもう試した:

function preventDefault(e) {
        e.preventDefault()};

    $("#main li:nth-child(2) a").bind("click", preventDefault);

    $(".secondLI").unbind("click", prevenDefault);

$("#main li:nth-child(2) a").click(function(e) {
    e.preventDefault();
    //do other stuff when a click happens
});
4

2 に答える 2

4

直接の子のみを選択する>セレクターを使用します。

$("#main li:nth-child(4) > a").click(function(e) { ...

または、リンクが 1 つしかない場合は、:firstセレクターを使用します。

$("#main li:nth-child(4) a:first").click(function(e) { ...

または、可能であればリンクにクラスまたは ID を指定して、直接選択することをお勧めします。

于 2012-04-14T07:49:43.417 に答える
0

クリック イベントバブル: 最初に li 要素のクリック ハンドラーが起動され (存在する場合)、次に親のクリック ハンドラー、次に親の親のクリック ハンドラーが起動されます。このチェーン内のハンドラーは、デフォルト アクションをキャンセルできます。したがって、イベント ハンドラーがli liなくてもpreventDefault(またはイベント ハンドラーがまったくなくても)、親にイベント ハンドラーがあり、 があるli場合preventDefault、既定のアクションは実行されません。

これを回避する 2 つの簡単な方法:

  • 外部のイベント ハンドラーでli、クリックのターゲットを確認し ( ) 、子の内部にない場合にe.targetのみ呼び出します。preventDefaultul
  • インナーのイベントハンドラで、liバブリングをキャンセル( e.stopPropagation); そうすれば、親のイベント ハンドラーはliまったく呼び出されません。
于 2012-04-14T08:14:29.940 に答える