0

重複の可能性:
親イベントハンドラーの実行を防止します

素敵なプラグイン(jQueryドロップダウン)を使用して、テーブルの行にドロップダウンを追加しています。

表示するメニューのIDを含むトリガーオブジェクトに属性が配置されます。この場合、テーブル行の「データドロップダウン」。

<tr data-dropdown="#dropdown-first">
  <td><a href="http://www.boston.com">Basic</a></td>
  <td>The basic plan</td>
</tr>

私の問題は、TDの1つにリンクが含まれていることですが、リンクは新しいページを起動するのではなく、常にドロップダウンをトリガーします。これは、メニューを呼び出すプラグインコードのスニペットです。

$(function () {
    $('BODY').on('click.dropdown', '[data-dropdown]', showMenu);
    $('HTML').on('click.dropdown', hideDropdowns);
});

.onイベントのセレクターを変更して、リンクなどの特定の子タグを除外する方法はありますか?別の提案された戦略はありますか?プラグインは可能な限りそのままにして、再利用性を高めたいと思います。

4

2 に答える 2

1

問題は、データドロップダウン属性を行に配置していることです。その行内の何かをクリックするとイベントがトリガーされ、showMenu内のロジックは、何かがクリックされた後に続行すべきかどうかさえチェックしません。

行全体がドロップダウンを引き起こす必要がありますか?そうでない場合は、データドロップダウンを行内の何かに配置します。

それ以外の場合は、jquery.dropdown.jsを変更し、これを41行目のevent.preventDefault()行の前に追加します。

if (trigger != event.target && $(event.target).hasClass('dropdown-ignore')) return;

次に、クラス'dropdown-ignore'をboston.comリンクに追加します。

于 2012-10-18T19:05:29.553 に答える
0

(プラグインがインスタンス化された後)を保持するに関連付けられているすべてのクリックイベントのバインドを解除することができます

HTML

<tr data-dropdown="#dropdown-first">
   <td class="disable-dropdown"><a href="http://www.boston.com">Basic</a></td>
   <td>The basic plan</td>
</tr>

JAVASCRIPT

$('.disable-dropdown').unbind('click');
于 2012-10-18T18:46:08.347 に答える